使用lodash或JS按值对对象数组进行排序

时间:2017-01-31 21:57:10

标签: javascript lodash

尝试对对象数组进行排序:

mainObject = {
  august: [],
  december: []
}

每个数组都包含多个具有不同日期和故障单信息的对象。

mainObject = {
  august: [ 
    { date: "2016-08-22", ticket: "parking" },
    { date: "2016-08-14", ticket: "speeding" },
    { date: "2016-08-29", ticket: "parking" }
  ],
  december: [
    { date: "2016-12-06", ticket: "parking" },
    { date: "2016-12-30", ticket: "parking" },
  ]
}

我将每张票打印到我的模板中,但希望按日期按升序排序。在这种情况下,我想在将这些数据传递给模板之前对信息进行排序,如何使用Lodash或其他方式?

我尝试过各种变体:

_.sortBy(mainObject, [function(d) { return d.date; }]); // date => undefined

我也尝试过深入了解对象:

_.forEach(mainObject, function(month) {
  _.sortBy(mainObject, [function(d) { return d.date; }]);
}

上述情况也不起作用。

2 个答案:

答案 0 :(得分:1)

您可以在普通Javascript中按date排序。



var mainObject = { august: [ { date: "2016-08-22", ticket: "parking" }, { date: "2016-08-14", ticket: "speeding" }, { date: "2016-08-29", ticket: "parking" }], december: [{ date: "2016-12-06", ticket: "parking" }, { date: "2016-12-30", ticket: "parking" }]};
    
Object.keys(mainObject).forEach(function (k) {
    mainObject[k].sort(function (a, b) {
        return a.date.localeCompare(b.date);
    });
});

console.log(mainObject);

.as-console-wrapper { max-height: 100% !important; top: 0; }




答案 1 :(得分:0)

使用Lodash,您可以使用_.mapValues()augustdecember键的值转换(“映射”)到正确排序的列表中,如下所示:

const sortedMainObj = _.mapValues(mainObject, (tickets) => {
  return _.sortBy(tickets, [(ticket) => ticket.date]);
});

console.log(sortedMainObj);