JavaScript中如何按id匹配合并两个对象数组得到目标新数组
按id匹配合并两个对象数组的实现方案
核心思路是先将majorModel转换为以id为键的映射表,减少匹配时的遍历开销,再遍历major数组合并对应属性即可,实现代码如下:
const major = [ { id: 1, subject: 'math', title: 'no good' }, { id: 2, subject: 'science', title: 'good' } ] const majorModel = [ { id: 1, amount: 23, date: '2022-03-01' }, // 注意:你的示例中此处id为3是笔误,修正为2即可得到你给出的预期结果 { id: 2, amount: 26, date: '2022-03-01' } ] // 构造id到majorModel元素的映射 const modelMap = new Map(majorModel.map(item => [item.id, item])) // 遍历major合并属性 const newObj = major.map(item => { // 匹配不到对应id时返回空对象,避免合并报错 const matchModel = modelMap.get(item.id) ?? {} // 展开合并,后面的对象会覆盖前面的同名属性,可根据需求调整顺序 return { ...item, ...matchModel } })
如果需要保留两个数组中所有独有的id项(比如原示例中majorModel里id为3的项),可以用以下实现:
// 提取两个数组所有不重复的id const allIds = [...new Set([...major.map(i => i.id), ...majorModel.map(i => i.id)])] const newObj = allIds.map(id => { const majorItem = major.find(i => i.id === id) ?? {} const modelItem = majorModel.find(i => i.id === id) ?? {} return { ...majorItem, ...modelItem } })
内容的提问来源于stack exchange,提问作者batman_jh
相关产品推荐
相关产品推荐

