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

JavaScript如何根据相同id键值合并两个长度不同的对象数组

按id合并两个长度不一致对象数组的实现

之前用Map.set()未生效,通常是遍历逻辑缺漏导致:要么是同id项直接覆盖丢失原有字段,要么是没有正确归集id键,要么是最后未将Map迭代器转为普通数组。以下是可直接运行的正确实现:

实现代码

const errArray = [
  { 'id': 1, 'error': ["Error 1", "Error2"] },
  { 'id': 2, 'error': ["Error 3", "Error4"] }
]

const warnArray = [
  { 'id': 1, 'warning': ["Error 5", "Error6"]}
]

const idMap = new Map()

// 遍历第一个数组存入Map,以id为键
errArray.forEach(item => {
  idMap.set(item.id, { ...item })
})

// 遍历第二个数组,同id则合并属性,不存在则新增
warnArray.forEach(item => {
  const existItem = idMap.get(item.id)
  if (existItem) {
    idMap.set(item.id, { ...existItem, ...item })
  } else {
    idMap.set(item.id, { ...item })
  }
})

// 提取Map值得到最终合并数组
const result = Array.from(idMap.values())

输出结果

运行后得到的结果和预期完全一致:

[
  {
    id: 1,
    error: ["Error 1", "Error2"],
    warning: ["Error 5", "Error6"]
  },
  {
    id: 2,
    error: ["Error 3", "Error4"]
  }
]

注意点

  • 存入Map时用扩展运算符做浅拷贝,避免后续修改污染原数组对象
  • 同id项合并时要先取出原有项,再和新项做属性合并,不能直接set覆盖
  • 如果后续要合并更多同结构数组,只要重复遍历、同id合并的逻辑即可,不需要修改原有代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:18:20