我有一个对象数组。我需要使用两个条件对其进行排序。
[{
id: 412,
start_date: 1488479400,
status: 1
}, {
id: 560,
start_date: 1499451100,
status: 0
}, {
id: 112,
start_date: 1499091200,
status: 0
}, {
id: 512,
start_date: 1488474500,
status: 1
}, {
id: 750,
start_date: 1483473100,
status: 1
}, {
id: 123,
start_date: 1499106600,
status: 0
}, ]
我需要使用两个条件对此进行排序。
这是预期的输出
[{
id: 750,
start_date: 1483473100,
status: 1
}, {
id: 512,
start_date: 1488474500,
status: 1
}, {
id: 412,
start_date: 1488479400,
status: 1
}, {
id: 112,
start_date: 1499091200,
status: 0
}, {
id: 123,
start_date: 1499106600,
status: 0
}, {
id: 560,
start_date: 1499451100,
status: 0
}, ]
我试过的是this answer
将数组分配给数据然后
data.sort(function(a,b){return a.start_date - b.start_date()});
但它没有使用start_date排序
答案 0 :(得分:3)
您可以使用Array#sort
和带有链式方法的排序函数作为排序条件。您可以直接使用EPOCH time。
它评估第一个delta并检查vakue是否真实,在这种情况下,值小于1或大于1。如果该值为零,则两个状态值都相等,并评估该时间的下一个增量。然后返回结果。
delta delta status start_date comment ------ ---------- -------------------------- < 0 sort by status only to top 0 evaluate sort by start_date as well > 0 sort by status only to bottom
var array = [{ id: 412, start_date: 1488479400, status: 1 }, { id: 560, start_date: 1499451100, status: 0 }, { id: 112, start_date: 1499091200, status: 0 }, { id: 512, start_date: 1488474500, status: 1 }, { id: 750, start_date: 1483473100, status: 1 }, { id: 123, start_date: 1499106600, status: 0 }];
array.sort(function (a, b) {
return b.status - a.status || b.start_date - a.start_date;
});
console.log(array);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;