You need to enable JavaScript to run this app. React.js中如何对Object.keys获取的数组按日期(最新/最旧)排序
优惠活动
大模型
产品
解决方案
定价
更多

React.js中如何对Object.keys获取的数组按日期(最新/最旧)排序

实现方法

普通对象本身不具备数组的sort方法,你之前无法直接调用myObj.sort的核心原因就是结构不匹配,只需要把现有对象转换为标准数组,再叠加日期比较逻辑即可完成排序,具体操作如下:

第一步:把对象转为可排序的数组

你当前的myObj是键为数字索引、值为业务数据对象的结构,不需要手动遍历Object.keys取值,直接用Object.values()就能一次性拿到所有业务对象组成的标准数组,替代你之前手动索引取值的写法:

const dataSource = Object.values(myObj)

第二步:编写日期排序逻辑

你存储的日期字段是YYYY-MM-DD HH:mm:ss的统一格式,这种格式的字符串字典排序顺序和真实时间顺序完全一致,不需要强制转换为时间戳即可直接比较;如果要兼容日期格式不统一的边缘场景,也可以转为毫秒时间戳做比较,稳定性更强。

  • 按*日期从最新到最旧(降序)*排序的实现:
// 方式1:统一格式下直接用字符串本地比较,性能更好
dataSource.sort((a, b) => b.date.localeCompare(a.date))

// 方式2:转成时间戳比较,对格式兼容性更强
dataSource.sort((a, b) => new Date(b.date).getTime() - new Date(a.date).getTime())
  • 按*日期从最旧到最新(升序)*排序的实现:只需要调整比较逻辑里a、b的位置即可
dataSource.sort((a, b) => a.date.localeCompare(b.date))

注意事项

  • JS原生的sort()是原地排序,会直接修改调用方法的数组,如果需要保留原数据的原始顺序,记得先做浅拷贝再执行排序:
// 浅拷贝后再排序,不改动原始数据
const sortedList = [...Object.values(myObj)].sort(/* 替换为你的排序逻辑 */)
  • 如果排序后还需要保留原对象的键值映射(比如要获取每个数据对应的原始对象索引),可以在转数组时把键值一并存入数组项:
const dataSource = Object.keys(myObj).map(objKey => ({
  originalKey: objKey,
  ...myObj[objKey]
}))
  • 排序完成后,不需要再通过Object.keys(myObj)索引取值,直接遍历排好序的数组就能拿到对应的id、name等字段,和你之前的取数逻辑完全兼容:
sortedList.forEach(item => {
  console.log(item.id, item.name, item.date)
})

内容的提问来源于stack exchange,提问作者Isaque Palmieri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.03 00:06:07