如何按属性降序排序这个对象数组
How can I sort this array of objects by both its properties in descending order
我有一个包含年/月整数表示的对象数组:
[
{
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的排序是这样的
-
第一项大于第二项,如果它收到一个正数
-
第一项小于第二项,如果它收到一个负数
-
,如果两者相同则为零
所以,我们首先比较年份。如果它们相同,则返回第二个月和第一个月的差值。如果年份不相同,则返回年份之差。
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;
});
相关文章:
- Javascript(Angular)从一个对象数组到第二个数组查找值
- 在Javascript中转换对象数组
- 在JavaScript中通过索引从对象数组中获取值
- Backbone虹吸以获取对象数组
- 如何在DataTables 2.1中迭代对象数组
- Javascript-根据赋值顺序,按键合并对象数组
- 将事件附加到对象/数组
- jQuery$.inArray()总是返回-1和一个对象数组
- javascript处理一个对象数组以获得一个新的对象数组
- javascript在数组中获取对象数组中键的所有不同值
- 在对象数组中查找多个值的d3范围
- Undercore.js获取对象数组中键对象的值
- 在mongoose中使用正则表达式在对象数组中进行查询搜索
- 如何通过json对象数组为嵌套对象赋值
- 如何循环通过2个对象数组并通过匹配id进行合并
- 为对象数组创建列表项
- 如何使用javascript合并两个对象数组
- JSON到对象数组,并向每个对象添加项
- JavaScript:从对象数组中获取唯一值及其计数
- 按不同项目对对象数组进行排序