JavaScript中如何按date日期字段对数组进行正确排序?
按date字段对对象数组排序的实现方案
你原先的代码不生效是因为date字段为字符串类型,直接使用减号运算会尝试将字符串隐式转换为数值,最终得到NaN,无法完成正确的排序逻辑。
推荐实现方案
方案1:字符串直接比较(适配当前YYYY-MM-DD格式)
因为YYYY-MM-DD格式的日期字符串的字典序和实际时间顺序完全一致,你可以直接用字符串的localeCompare方法完成排序:
- 降序(最新日期排在最前):
const sortedArray = array.sort((a, b) => b.date.localeCompare(a.date))
- 升序(最早日期排在最前):
const sortedArray = array.sort((a, b) => a.date.localeCompare(b.date))
方案2:转换为时间戳比较(适配所有合法日期格式)
如果后续日期格式有变动,更通用的方案是先将日期字符串转为Date对象,再用时间戳差值排序:
- 降序(最新日期排在最前):
const sortedArray = array.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())
- 升序(最早日期排在最前):
const sortedArray = array.sort((a, b) => new Date(a.date).getTime() - new Date(b.date).getTime())
注意事项
JavaScript的Array.sort()是原地排序方法,会直接修改原数组。如果你需要保留原数组不变,可以先拷贝一份再执行排序:
// 先解构拷贝原数组,再排序,不影响原数组内容 const sortedArray = [...array].sort((a, b) => b.date.localeCompare(a.date))
内容的提问来源于stack exchange,提问作者Vadik Shnaider
相关产品推荐
相关产品推荐

