You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据数组内其他值过滤数组?获取各type最新date的对象

用reduce()实现按type筛选最新date的对象数组

原始数据:

[
   {id: 1, date: "2022-10-01T12:00:00.00", type: 1},
   {id: 2, date: "2022-10-02T12:00:00.00", type: 1},
   {id: 3, date: "2022-10-03T12:00:00.00", type: 2},
   {id: 4, date: "2022-10-04T12:00:00.00", type: 2},
]

需求:筛选出每个type对应最新date的对象,同时将date字段重命名为dttm,最终结果如下:

[
   {id: 2, dttm: "2022-10-02T12:00:00.00", type: 1},
   {id: 4, dttm: "2022-10-04T12:00:00.00", type: 2},
]

实现代码

用reduce()可以高效完成这个需求,核心逻辑是用对象作为累加器,以type为键存储对应最新的记录:

const data = [
   {id: 1, date: "2022-10-01T12:00:00.00", type: 1},
   {id: 2, date: "2022-10-02T12:00:00.00", type: 1},
   {id: 3, date: "2022-10-03T12:00:00.00", type: 2},
   {id: 4, date: "2022-10-04T12:00:00.00", type: 2},
];

const result = Object.values(data.reduce((acc, item) => {
  // 检查当前type是否已存在,或当前item的date比已存的更新
  if (!acc[item.type] || new Date(item.date) > new Date(acc[item.type].date)) {
    // 重命名date为dttm,同时保留其他字段
    acc[item.type] = { ...item, dttm: item.date };
    delete acc[item.type].date;
  }
  return acc;
}, {}));

console.log(result);

逻辑说明

  1. 初始化累加器acc为一个空对象,用来按type分组存储最新记录
  2. 遍历每个数据项:
    • 如果当前type在累加器中不存在,或者当前项的date比累加器中同type的记录更新,就替换为当前项
    • 处理字段重命名:复制当前项,添加dttm字段并赋值为原date,删除原date字段
  3. 最后用Object.values()把累加器的对象值转换为数组,得到最终结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:00:53