You need to enable JavaScript to run this app. JavaScript合并两个对象数组 按Id键去重映射日期字段
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript合并两个对象数组 按Id键去重映射日期字段

两对象数组按唯一Id关联重组字段实现方案
  • 核心逻辑:通过Id建立全局映射表,分别从两个源数组提取目标字段并重命名,按需转换为指定数组结构,兼容两种输出要求。

生成desiredOutput2(扁平带Id字段结构)

直接运行以下代码即可:

// 构建Id全局映射表,兼容单侧缺失数据的场景
const idMap = new Map();

// 处理startDate数组,提取datePosted并重命名为startDate
startDate.forEach(item => {
  const merged = idMap.get(item.Id) ?? { Id: item.Id };
  merged.startDate = item.datePosted;
  idMap.set(item.Id, merged);
});

// 处理endDate数组,提取datePosted并重命名为endDate,合并到对应Id条目
endDate.forEach(item => {
  const merged = idMap.get(item.Id) ?? { Id: item.Id };
  merged.endDate = item.datePosted;
  idMap.set(item.Id, merged);
});

// 转换为目标数组
const desiredOutput2 = Array.from(idMap.values());

生成desiredOutput(Id作为对象键的结构)

在上述idMap基础上修改转换逻辑:

const desiredOutput = Array.from(idMap.entries()).map(([id, val]) => ({
  [id]: {
    startDate: val.startDate,
    endDate: val.endDate
  }
}));

补充说明

  • 用Map做关联的查询效率高于双层遍历匹配,适合数据量较大的场景
  • 自动兼容异常数据:若某Id仅出现在单个源数组中,最终结果会保留已存在的字段,不会丢弃数据
  • 自动过滤无关字段:不会将不需要的name字段带入最终输出

之前使用展开符无法实现的原因:直接展开两个数组得到的合并数组会保留全部原字段,既不会按Id自动去重合并,也不会自动完成datePosted的字段重命名,必须先完成映射关联和字段提取步骤。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.05 14:15:09