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

JS如何基于匹配属性合并两个对象数组,保留首个数组元素并补充指定属性

实现代码

推荐方案(O(n)时间复杂度,性能最优)

先将nameDetails转换为以nameId为键的Map结构,避免嵌套循环查找,适合所有数据量场景:

// 构造nameId和salary的映射关系
const salaryMap = new Map(nameDetails.map(item => [item.nameId, item.salary]))

// 遍历第一个数组,补充salary属性
const result = selectedNames.map(item => ({
  ...item,
  salary: salaryMap.get(item.id)
}))

备选方案(匹配你提到的filter思路)

如果你坚持用filter实现,也可以用如下写法,缺点是时间复杂度为O(n²),仅适合小数据量场景:

// 筛选出匹配的详情项
const matchedDetails = nameDetails.filter(detail => 
  selectedNames.some(name => name.id === detail.nameId)
)

// 合并属性
const result = selectedNames.map(name => ({
  ...name,
  salary: matchedDetails.find(detail => detail.nameId === name.id).salary
}))

两种方案最终输出的result都和你给出的期望结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:24:03