按日期对具有日期字段的对象数组进行排序

新手上路,请多包涵

给定以下对象数组,我需要按日期字段对它们进行升序排序。

 var myArray = [
  {
    name: "Joe Blow",
    date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
  },
  {
    name: "Sam Snead",
    date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
  },
  {
    name: "John Smith",
    date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"
  }
];

在上面的示例中,最终结果将是 John Smith、Sam Snead 和 Joe Blow。

我正在尝试使用 lodash 的 _.sortBy() ,但无论我如何尝试使用它,我都无法进行任何排序:

 _.sortBy(myArray, function(dateObj) {
  return dateObj.date;
});

或者

_.sortBy(myArray, 'date');

我需要更改什么才能正确排序我的数组?我还有 Moment.js,所以如果需要我可以用它来格式化日期字符串。我尝试使用 .unix() 转换日期属性,但这没有什么不同。

谢谢。

原文由 wonder95 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 461
2 个回答

你真的不需要lodash。您可以使用 JavaScript 的 Array.prototype.sort 方法。

您需要根据日期字符串创建 Date 对象,然后才能比较它们。

 var myArray = [{
  name: "Joe Blow",
  date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
}, {
  name: "Sam Snead",
  date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
}, {
  name: "John Smith",
  date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"
}];

myArray.sort(function compare(a, b) {
  var dateA = new Date(a.date);
  var dateB = new Date(b.date);
  return dateA - dateB;
});

console.log(myArray);

原文由 Punit 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是一个使用标准 Javascript 的解决方案,方法是将两个值都转换为日期对象并比较它们的值。

 myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime());

一个完整的片段:

 var myArray = [
  {
    name: "Joe Blow",
    date: "Mon Oct 31 2016 00:00:00 GMT-0700 (PDT)"
  },
  {
    name: "Sam Snead",
    date: "Sun Oct 30 2016 00:00:00 GMT-0700 (PDT)"
  },
  {
    name: "John Smith",
    date: "Sat Oct 29 2016 00:00:00 GMT-0700 (PDT)"
  }
];

myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime());

console.log(myArray);

原文由 Robby Cornelissen 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题