如何使用Lodash对时间戳数组进行降序排序(最新时间戳在前)
解决Lodash时间戳数组降序排序问题
嘿,你说得完全对!_.sortBy() 默认是按升序排序的,所以旧的时间戳会排在前面,自然达不到你想要的“最新时间在首位”的效果。这里给你两种简单好用的解决方法:
方法一:_.sortBy() + 反转数组
先通过 _.sortBy() 得到升序排列的结果,再调用数组的 reverse() 方法反转顺序,就能让最新的时间戳跑到最前面:
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).reverse();
方法二:直接用 _.orderBy() 指定降序
Lodash 的 _.orderBy() 支持直接设置排序方向,比先排序再反转更直观。因为我们是直接对数组元素本身排序,第二个参数传空数组即可,第三个参数传 ['desc'] 就表示按降序排列:
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 = _.orderBy(timestamps, [], ['desc']);
小补充
你用的是 ISO 格式的时间字符串,这种格式的字符串本身就能通过字典序比较出时间先后(年份在前、月份次之,以此类推),所以不需要额外转换成 Date 对象。如果想更严谨,也可以传入迭代函数把字符串转成日期再排序,效果是一样的:
const sorted = _.orderBy(timestamps, ts => new Date(ts), ['desc']);
两种写法都能满足需求,选哪种全看你个人习惯~
内容的提问来源于stack exchange,提问作者Kay
相关产品推荐
相关产品推荐

