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

[
   {
      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;
        });


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

尽管这可以正常工作,但似乎有点不客气。如何使用单个排序功能对数组进行正确排序?

提前致谢。

最佳答案

JavaScript的排序方式如下


如果第一项大于第二项,则它收到一个正数
如果第一项小于第二项,则它会收到负数
如果它们相同,则为零。


因此,我们首先比较年份。如果它们相同,我们将返回第二个月和第一个月之间的差额。如果年份不相同,则我们返回年份之间的差额。

    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 } ]

09-10 10:46
查看更多