【问题标题】:Sort an array of Objects by a value with lodash or JS使用 lodash 或 JS 按值对对象数组进行排序
【发布时间】:2017-01-31 21:57:10
【问题描述】:

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

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; }]);
}

上面的也行不通。

【问题讨论】:

    标签: javascript lodash


    【解决方案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; }

    【讨论】:

    • 这太棒了!谢谢
    【解决方案2】:

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

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

    【讨论】:

    • 抱歉无法测试,因为我无法使用 es6
    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多