我有一个包含年份/月份的整数表示形式的对象数组:
[
{
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 } ]