如何按日期对含created_at属性的JavaScript对象数组排序?
问题分析与解决
错误原因
- 误用
filter方法:filter的作用是筛选数组中符合条件的元素,并非用于排序,你完全不需要用它来处理排序逻辑。 - 属性名不匹配:你的示例数组里日期属性是
date,但代码里写的是created_at,这会导致new Date(b.created_at)生成无效的Date对象,无法参与算术运算,触发类型错误。 - 排序逻辑嵌套错误:排序应该直接对父数组调用
sort方法,不需要嵌套在filter的回调里。
正确解决方案
基础写法(JavaScript/TypeScript)
先修正属性名,直接调用sort方法:
// 注意:示例数组的日期属性是date,若实际数组用的是created_at,替换成对应字段即可 parent_array.sort((a, b) => { return new Date(b.date) - new Date(a.date); });
- 上述代码会按日期倒序排列(最新日期在前)
- 如果需要正序排列,调换
b.date和a.date的位置:
parent_array.sort((a, b) => { return new Date(a.date) - new Date(b.date); });
类型安全的TypeScript写法
为避免类型错误,可先定义数组元素的类型:
interface Item { id: number; date: string; // 实际字段是created_at的话,替换成created_at即可 } const parent_array: Item[] = [ { id: 1, date: '2022-12-01T20:34:52.000000Z' }, { id: 2, date: '2022-12-06T20:34:52.000000Z' } ]; parent_array.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime());
用getTime()显式获取时间戳,能让类型检查更清晰,避免潜在的类型问题。
注意事项
sort方法会原地修改原数组,如果不想改动原数组,可以先创建副本再排序:
const sortedArray = [...parent_array].sort((a, b) => new Date(b.date) - new Date(a.date));
内容的提问来源于stack exchange,提问作者Sakib Hasan
相关产品推荐
相关产品推荐

