Sort array of objects with date field by date
给出以下对象数组,我需要按日期字段升序对它们进行排序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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(),但是无论如何尝试,都无法进行任何排序:
1 2 3 | _.sortBy(myArray, function(dateObj) { return dateObj.date; }); |
或
1 | _.sortBy(myArray, 'date'); |
为了使阵列正确排序,我需要更改什么?我也有Moment.js,因此如果需要,我可以使用它来格式化日期字符串。我尝试使用.unix()转换date属性,但这没什么区别。
谢谢。
您真的不需要lodash。您可以使用JavaScript的
您需要先根据日期字符串创建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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); |
您的日期值是字符串,因此您需要使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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) |
1 | <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.2/lodash.min.js"> |
这是使用标准Javascript的解决方案,方法是将两个值都转换为date对象并比较它们的值。
1 | myArray.sort((d1, d2) => new Date(d1.date).getTime() - new Date(d2.date).getTime()); |
完整的代码段:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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对对象数组按升序或降序对日期进行排序,则应使用
https://lodash.com/docs/4.17.15#orderBy,此方法允许按" asc"或" desc"指定排序顺序
一个例子是:
1 2 3 4 | const sortedArray = _(myArray.orderBy([ function(object) { return new Date(object.date); }],["desc"]) |
只写
lodash会自动认为这是一个日期,它将像魔术一样起作用!
太棒了!