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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按日期对具有日期字段的对象数组进行排序相关的知识,希望对你有一定的参考价值。

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

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()转换日期属性,但这并没有什么区别。

谢谢。

答案

你真的不需要lodash。只需使用javascript qazxsw poo方法。

在比较它们之前,您需要从日期字符串创建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);构造函数将它们更改为javascript new Date()对象。这样你就可以对它们进行排序(使用date)。

_.sortBy
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 = _.sortBy(myArray, function(dateObj) {
  return new Date(dateObj.date);
});

console.log(myArray)
另一答案

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

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>

一个完整的片段:

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

lodash会自动发现这是一个约会,它会像魔术一样运作!

真棒!

以上是关于按日期对具有日期字段的对象数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章

按日期对对象的嵌套数组进行排序

Javascript - 按日期然后按时间对对象数组进行排序

javascript 使用日期值按单键对对象数组进行排序

通过具有日期值的单个键对对象数组进行排序

JQuery使用日期对对象数组进行排序[重复]

按日期排序对象数组[重复]