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

如何按keyword匹配合并两个JS对象数组,缺失项补number:0

问题原因

你当前代码出现重复对象的核心原因是:遍历array1每个元素的逻辑里嵌套遍历了整个array2,每遍历到一个array2的元素都会执行一次push操作,array2有多少个元素,每个array1的元素就会被重复插入多少次到结果数组里,自然会出现大量重复对象。

解决代码

我们可以先把array2转换成以keyword为键的映射表,遍历array1的时候直接查表匹配即可,既不会出现重复问题,查找效率也更高,实现代码如下:

const array1 = [
  { keyword: 'present', prop: 'foo' },
  { keyword: 'another present', prop: 'bla' },
  { keyword: 'not present', prop: 'hey' }
]

const array2 = [
  { keyword: 'present', number: 12345 },
  { keyword: 'another present', number: 12345 }
]

// 构建array2的keyword映射表
const array2Map = new Map(array2.map(item => [item.keyword, item]))

const res = array1.map(obj1 => {
  const matchObj = array2Map.get(obj1.keyword)
  // 匹配到就合并两个对象属性,未匹配到就新增number:0
  return matchObj ? {...obj1, ...matchObj} : {...obj1, number: 0}
})

console.log(res)

运行后输出完全符合预期:

[
  { keyword: 'present', prop: 'foo', number: 12345 },
  { keyword: 'another present', prop: 'bla', number: 12345 },
  { keyword: 'not present', prop: 'hey', number: 0 }
]

可选优化

如果你的array2里存在同一个keyword对应多个对象的场景,可以提前对array2做去重或属性合并处理,避免映射表出现值覆盖的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:54:00