won*_*r95 22 javascript sorting date lodash
给出以下对象数组,我需要按日期字段升序对它们进行排序.
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)"
}
];
Run Code Online (Sandbox Code Playgroud)
所以在这个例子中,最终结果将是John Smith,Sam Snead和Joe Blow.
我正在尝试使用lodash的_.sortBy(),但无论我如何尝试使用它,我都无法进行任何排序:
_.sortBy(myArray, function(dateObj) {
return dateObj.date;
});
Run Code Online (Sandbox Code Playgroud)
要么
_.sortBy(myArray, 'date');
Run Code Online (Sandbox Code Playgroud)
我需要更改什么来正确排序我的数组?我也有Moment.js,所以我可以根据需要使用它来格式化日期字符串.我尝试使用.unix()转换日期属性,但这并没有什么区别.
谢谢.
Pun*_*nit 46
你真的不需要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);Run Code Online (Sandbox Code Playgroud)
Dav*_*ira 10
使用 Lodash orderBy 的更简洁方法:
import _ from 'lodash'
const sortedArray = _.orderBy(myArray, [(obj) => new Date(obj.date)], ['asc'])
Run Code Online (Sandbox Code Playgroud)
您的日期值是字符串,因此您需要使用new Date()构造函数将它们更改为javascript 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)Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"></script>Run Code Online (Sandbox Code Playgroud)
如果您尝试使用 lodash 为对象数组按升序或降序对日期进行排序,则应使用_.orderBy而不是_.sortBy
https://lodash.com/docs/4.17.15#orderBy,此方法允许通过 'asc' 或 'desc' 指定排序顺序
一个例子是:
const sortedArray = _(myArray.orderBy([
function(object) {
return new Date(object.date);
}],["desc"])
Run Code Online (Sandbox Code Playgroud)
这是使用标准Javascript的解决方案,方法是将两个值都转换为date对象并比较它们的值。
myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime());
Run Code Online (Sandbox Code Playgroud)
完整的代码段:
myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime());
Run Code Online (Sandbox Code Playgroud)