如何使用lodash以desc顺序对时间戳数组进行排序

时间:2018-04-05 13:40:36

标签: javascript lodash

我想使用 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);

这不符合我的预期,我相信它会按顺序排序。

7 个答案:

答案 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% - 如果几个日期不重要

Sortreverse

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