如何按属性降序排序这个对象数组

How can I sort this array of objects by both its properties in descending order

本文关键字:对象 数组 排序 何按 属性 降序      更新时间:2023-09-26

我有一个包含年/月整数表示的对象数组:

[
   {
      year : 2014,
      month : 10
   },
   { 
     year : 2011,
     month : 6
   },
   {
     year : 2014,
     month : 11
   }
]

我需要按月和年对它们进行排序,以便最近的对象排在第一位。

目前我正在执行两种排序来实现这一点:

        items.sort(function(a, b){
            if (a.month === b.month) {
                return 0;
            } else if (b.month > a.month) {
                return 1;
            }
            return -1;
        });
        items.sort(function(a, b){
            if (a.year === b.year) {
                return 0;
            } else if (b.year > a.year) {
                return 1;
            }
            return -1;
        });

首先按月排序,然后按年排序。

虽然这工作得很好,但它似乎有点粗糙。如何使用单个排序函数正确排序此数组?

你可以这样做:

items.sort(function(a, b){
  return a.year === b.year ? b.month - a.month : b.year - a.year;
});

JavaScript的排序是这样的

  1. 第一项大于第二项,如果它收到一个正数

  2. 第一项小于第二项,如果它收到一个负数

  3. ,如果两者相同则为零

所以,我们首先比较年份。如果它们相同,则返回第二个月和第一个月的差值。如果年份不相同,则返回年份之差。

    items.sort(function(first, second) {
        if (first.year === second.year) {
            return second.month - first.month;
        }
        return second.year - first.year;
    });

[ { year: 2014, month: 11 },
  { year: 2014, month: 10 },
  { year: 2011, month: 6 } ]

像这样:

items.sort(function(a, b) {
  return a.year - b.year || a.month - b.month;
});