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
相关产品推荐
相关产品推荐

