如何用JavaScript将对象数组与按唯一ID为键的对象合并为目标数组
ES6 合并实现方案
因为你的obj已经提前用ItemID作为键做了索引,直接遍历数组做合并即可,时间复杂度为O(n),性能最优:
const mergedArr = arr1.map(item => ({ ...item, ...obj[item.ItemID] }))
兼容无匹配项的版本
如果存在部分arr1的ItemID在obj中找不到对应值的场景,避免合并undefined属性可以加兜底逻辑:
const mergedArr = arr1.map(item => ({ ...item, ...(obj[item.ItemID] ?? {}) }))
注:空值合并运算符
??为ES2020特性,若运行环境不支持可替换为||。||会将0、false等falsy值判定为无效,??仅对null/undefined生效,可根据业务场景选择。
运行结果
代入你提供的示例代码后,输出结果如下:
[ { ItemID: '164488786031', name: 'google', promotion_id: 7, name2: 'google-mt' }, { ItemID: '164488786030', name: 'facebook', promotion_id: 9, name2: 'facebook-mt' } ]
逻辑说明
- 用
map遍历原数组arr1生成新数组,不会修改原始数据 - 用对象扩展运算符
...合并两个对象的属性:如果存在同名属性,写在后面的对象属性会覆盖前面的。如果需要arr1的属性优先级高于obj,保持现有顺序即可;如果需要obj属性不被覆盖,调换两个扩展语句的顺序即可。
内容的提问来源于stack exchange,提问作者Nightcrawler
相关产品推荐
相关产品推荐

