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

按名称去重并保留最新创建日期对象的实现方案

按Name去重并保留最新创建时间的对象数组

给定如下对象数组:

[
   {
      "name":"Aaron",
      "status":"Pending",
      "createdDate":"1-1-2000"
   },
   {
      "name":"Bob",
      "status":"Approved",
      "createdDate":"1-2-2000"
   },
   {
      "name":"Aaron",
      "status":"Rejected",
      "createdDate":"1-3-2000"
   }
]

需求是按name字段去重,仅保留每个name对应createdDate最新的对象,最终期望得到:

[
   {
      "name":"Bob",
      "status":"Approved",
      "createdDate":"1-2-2000"
   },
   {
      "name":"Aaron",
      "status":"Rejected",
      "createdDate":"1-3-2000"
   }
]

不用先分组再提取,直接用Array.reduce()就能一步搞定,代码如下:

const data = [
  { name: "Aaron", status: "Pending", createdDate: "1-1-2000" },
  { name: "Bob", status: "Approved", createdDate: "1-2-2000" },
  { name: "Aaron", status: "Rejected", createdDate: "1-3-2000" }
];

// 辅助函数:将MM-DD-YYYY格式的日期字符串转为Date对象,方便比较时间先后
const parseDate = (dateStr) => {
  const [month, day, year] = dateStr.split('-');
  return new Date(year, month - 1, day);
};

const result = Object.values(data.reduce((acc, curr) => {
  const existingItem = acc[curr.name];
  // 若当前name未存储过,或当前对象的创建时间更新,则替换为当前对象
  if (!existingItem || parseDate(curr.createdDate) > parseDate(existingItem.createdDate)) {
    acc[curr.name] = curr;
  }
  return acc;
}, {}));

console.log(result);

代码说明

  • 用reduce遍历数组时,借助临时对象acc存储每个name对应的最新对象
  • 每次遍历都会对比当前对象与已存对象的创建时间,保留更新的那一个
  • 最后通过Object.values()将临时对象中的值转为数组,得到最终结果

如果你的日期格式是标准的YYYY-MM-DD,可以直接比较字符串,无需额外的日期解析函数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:28:33