按日期排列具有日期字段的对象数组
给出下列对象数组,我需要按日期字段升序对它们进行排序。按日期排列具有日期字段的对象数组
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的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);
它具有很好的浏览器支持。自从ECMAScript 3以来它一直处于规范中,这意味着它适用于所有浏览器。 (甚至IE7) –
由于OP有moment.js,所以它应该用于解析日期,而不是内置日期。 – RobG
您的日期值是字符串,因此您需要使用构造函数new Date()
将它们更改为javascript对象。这样您可以对它们进行分类(使用_.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)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>
下面是使用标准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);
那些是日期对象或日期字符串? – andlrc
标准的Javascript日期字符串。正如我所说,如果需要,我可以先用Moment将它们转换为另一种格式,但转换为unix似乎不起作用,并且这似乎是最简单的排序格式。 – wonder95
值是日期还是字符串? – Dekel