【问题标题】:How to sort a array of objects by nested object property stored at index? [duplicate]如何通过存储在索引处的嵌套对象属性对对象数组进行排序? [复制]
【发布时间】:2019-09-03 22:12:38
【问题描述】:

我需要按其嵌套属性按降序对这个对象数组进行排序,但我需要排序的属性“存储”在属性索引中(不确定这是否是所谓的)。我如何使用 .sort() 做到这一点?

我尝试在 stackoverflow 上搜索答案,并且有很多关于此的主题,但我找不到这个具体的答案或者我无法理解它..

我试过这段代码:

        var array = [
          {user:"Julia", startTime: "2019-04-09T11:22:36"}, 
          {user:"Lisa", startTime:"2019-04-10T11:22:36"},
          {user:"Hank", startTime:"2019-04-11T11:22:36"},
          {user:"Hank", startTime:"2019-04-08T11:22:36"},
        ];
        
        
        function compare(a, b) {
          const startA = new Date(a.startTime).getTime();
          const startB = new Date(b.startTime).getTime();
          return startA + startB;
        }
        
        console.log(array.sort(compare));

【问题讨论】:

  • 如果你想要一个数组,你应该省略它们key: 语法,那是对象
  • sry,这是我的第一篇文章。我到底哪里错了?
  • 只要运行 sn -p - 你可以看到语法不正确。你没有正确定义数组
  • 啊,我明白了。我修复了语法,但它没有解决我遇到的问题。就像你说的语法错误但问题仍然存在。幸运的是 Code Maniac 和 topheman 更正了语法并给了我答案。
  • 答案在我链接到的问题中 - 请参阅页面顶部

标签: javascript arrays nested javascript-objects


【解决方案1】:

Aprrecate @mbojko 的答案,因为用户想要以降序排列数组使用 startB - startA;

按降序排列日期 - 最近的日期排在最前面

var array = [
   {user:"Julia", startTime: "2019-04-09T11:22:36"}, 
   {user:"Charles", startTime:"2019-04-10T11:22:36"},
   {user:"Lisa", startTime:"2019-04-10T11:22:36"},
   {user:"Hank", startTime:"2019-04-11T11:22:36"},
   {user:"Hank", startTime:"2019-04-08T11:22:36"},

];

function compare(a, b) {

const startA = new Date(a.startTime).getTime();
const startB = new Date(b.startTime).getTime();
return startB - startA;
}

console.log(array.sort(compare));

【讨论】:

    【解决方案2】:

    return startB - startA; 而不是return startA + startB;

    【讨论】:

    • 我看不出这是怎么回答的,因为我希望它们按降序排列?还是我没看到什么?
    • 哦,对不起。我的错。
    【解决方案3】:

    你很接近:只需将 return startA + startB; 更改为 return startA > startB ? -1 : 1;

    var array = [
      {user:"Julia", startTime: "2019-04-09T11:22:36"}, 
      {user:"Lisa", startTime:"2019-04-10T11:22:36"},
      {user:"Hank", startTime:"2019-04-11T11:22:36"},
      {user:"Hank", startTime:"2019-04-08T11:22:36"},
    
    ];
    
    function compare(a, b) {
      const startA = new Date(a.startTime).getTime();
      const startB = new Date(b.startTime).getTime();
      return startA > startB ? -1 : 1;
    }
    
    console.log(array.sort(compare));

    【讨论】:

      猜你喜欢
      • 2011-07-01
      • 2021-09-19
      • 2022-11-03
      • 1970-01-01
      • 2012-04-04
      • 1970-01-01
      • 2018-07-02
      相关资源
      最近更新 更多