我想使用 lodash 对以下时间戳数组进行排序,因此最新的时间戳是第一个[3]。
代码:
let timestamps = ["2017-01-15T19:18:13.000Z", "2016-11-24T17:33:56.000Z", "2017-04-24T00:41:18.000Z", "2017-03-06T01:45:29.000Z", "2017-03-05T03:30:40.000Z"]
const sorted = _.sortBy(timestamps);
这不符合我的预期,我相信它会按顺序排序。
答案 0 :(得分:3)
如何使用lodash
对时间戳数组进行排序
此代码已使用lodash正确排序时间戳:
const sorted = _.sortBy(timestamps);
只是按升序排列,只需使用以下方法反转结果:
const sorted = _.sortBy(timestamps).reverse();
答案 1 :(得分:1)
最简单的方法是使用Array.prototype.sort而不是lodash。
感谢 @mplungjan 和 @ gurvinder372 指出new Date
没用。
请记住,Array.prototype.sort会更新该地点的数组。
const dates = [
"2017-01-15T19:18:13.000Z",
"2016-11-24T17:33:56.000Z",
"2017-04-24T00:41:18.000Z",
"2017-03-06T01:45:29.000Z",
"2017-03-05T03:30:40.000Z"
]
dates.sort((d1, d2) => d2 > d1 ? 1 : -1) // desc
console.log(dates)
dates.sort() // asc
console.log(dates)

答案 2 :(得分:1)
您可以将ISO 8601日期字符串视为普通字符串,因为它们可以排序为字符串。
var array = ["2017-01-15T19:18:13.000Z", "2016-11-24T17:33:56.000Z", "2017-04-24T00:41:18.000Z", "2017-03-06T01:45:29.000Z", "2017-03-05T03:30:40.000Z"];
array.sort((a, b) => b > a || -(b < a));
console.log(array);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 3 :(得分:1)
字符串可使用内置排序进行排序 - 无需使用lodash或排序函数
根据https://jsperf.com/array-sort-reverse-vs-string-comparison,这比字符串比较慢1.2% - 如果几个日期不重要
console.log(
["2017-01-15T19:18:13.000Z", "2016-11-24T17:33:56.000Z", "2017-04-24T00:41:18.000Z", "2017-03-06T01:45:29.000Z", "2017-03-05T03:30:40.000Z" ]
.sort()
.reverse()
)
答案 4 :(得分:1)
使用此选项可以使用另一种方法
let timestamps = ["2017-01-15T19:18:13.000Z", "2016-11-24T17:33:56.000Z", "2017-04-24T00:41:18.000Z", "2017-03-06T01:45:29.000Z", "2017-03-05T03:30:40.000Z"]
const sorterFunc = item => (new Date() - new Date(item));
const sorted = _.sortBy(timestamps, [sorterFunc]);
那些将对数组进行排序而根本不必调用方法.reverse()
。
答案 5 :(得分:1)
orderBy允许您指定排序顺序,而sortBy不指定排序顺序。
const sorted = orderBy(timestamps, ['desc']);
答案 6 :(得分:0)
var users = ["2017-01-15T19:18:13.000Z", "2016-11-24T17:33:56.000Z", "2017-04-
24T00:41:18.000Z", "2017-03-06T01:45:29.000Z", "2017-03-05T03:30:40.000Z"];
_.sortBy(users, String);