如何使用Lodash或原生JS对二维数组按时间戳升序排序
按时间戳升序排序二维数组的实现方案
原生JavaScript实现
核心依靠数组原生的sort()方法,传入自定义比较规则实现升序排序:
注意:
sort()是原地排序,会直接修改原数组。如果需要保留原数组,可先通过扩展运算符/slice()拷贝后再排序。
额外提示:如果时间戳存储为字符串类型,需要先转为数字再计算差值,例如写法为finalData.sort((a, b) => Number(a[0]) - Number(b[0]))
- 直接修改原数组的写法:
let finalData = [[1920000000, 273.15], [1620033000, 276.15], [1627700000, 272.15]] // 按子数组第0位的时间戳升序排序 finalData.sort((a, b) => a[0] - b[0])
- 保留原数组、生成新排序数组的写法:
let finalData = [[1920000000, 273.15], [1620033000, 276.15], [1627700000, 272.15]] // 先浅拷贝原数组再排序,不修改原数据 let sortedFinalData = [...finalData].sort((a, b) => a[0] - b[0])
两种写法执行后得到的排序结果均为:
[[1620033000, 276.15], [1627700000, 272.15], [1920000000, 273.15]]
Lodash实现
使用Lodash提供的sortBy/orderBy方法,指定排序依据为子数组的时间戳字段即可,默认按升序排列,且不会修改原数组,直接返回新的排序后数组:
- 基础
sortBy写法:
// 先引入Lodash(按需引入或全量引入均可) import _ from 'lodash' let finalData = [[1920000000, 273.15], [1620033000, 276.15], [1627700000, 272.15]] // 按子数组第0位升序排序 let sortedFinalData = _.sortBy(finalData, item => item[0])
- 显式指定排序规则的
orderBy写法(适合多条件排序场景,单条件也可用):
let sortedFinalData = _.orderBy(finalData, [item => item[0]], ['asc'])
内容的提问来源于stack exchange,提问作者Ethical Hacking
相关产品推荐
相关产品推荐

