找出两个数组中id相同的元素并且合并?

两个数组的长度不固定 找出两个数组中id相同的元素合并成一个新的对象并放在数组里
这个怎么写比较好?不用map和for怎么比较简单?

let arr1 = [{id:1,name:'张三'},{id:4,name:'李四'},{id:57,name:'狗剩'}]
let arr2 = [{id:7,age:25},{id:3,age:44},{id:4,age:22},{id:11,age:34}]

合并结果

[
     {id:4,name:'李四',age:22}
]
let arr = []
let obj = {}
arr1.map(item=>{
    arr2.map(item2=>{
        if(item.id==item2.id){
            obj.id = item.id
            obj.name = item.name
            obj.age = item2.age
            arr.push(obj)
        }
    })
})
console.log(arr)
阅读 3.9k
1 个回答

两个数组都遍历一次,O(m + n)
比两层循环的 O(m * n) 简单

const conbine = (arr1, arr2) => {
  const rtn = []
  const obj = {}
  arr1.forEach(item => {
    obj[item.id] = item
  })
  arr2.forEach(item => {
    if (obj[item.id]) {
      rtn.push({
        ...obj[item.id],
        ...item
      })
    }
  })
  return rtn
}

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题