在两个条件下排序的对象数组

时间:2017-03-04 08:13:22

标签: javascript arrays sorting object

我有一个对象数组。我需要使用两个条件对其进行排序。

[{
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
}, ]

我需要使用两个条件对此进行排序。

  1. 状态为1的所有对象应该首先出现
  2. 日期应按降序排列,即最高日期。
  3. 这是预期的输出

    [{
    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排序

    Here's my Fiddle

1 个答案:

答案 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

&#13;
&#13;
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;
&#13;
&#13;