两个数组里面的对象元素根据相同的id合并到一个数组

let arr=[{id:1,name:'dylan'},{id:2,name:'kebi'}]
let arr1=[{id:1,position:'ceo'},{id:3,position:'sales'}]
let list=arr.reduce((pre,cur)=>{
  let target=pre.find(ee=>ee.id == cur.id)
  if(target){
    Object.assign(target,cur)
  }else{
    pre.push(cur)
  }
  return pre
},arr1)
console.log(list)  
/**
[
{ id: 1, position: 'ceo', name: 'dylan' },
{ id: 3, position: 'sales' },
{ id: 2, name: 'kebi' }
]
 * /

解析:
arr.reduce((pre,cur)=>{},arr1)
arr1是初始值,pre是累计值,cur是当前传入的值,所以pre的初始值就是arr1,cur的初始值是arr的第一个元素
find方法返回数组中第一个符合的元素,如果没有符合的返回undefined
target的值就是判断下累计的数组里面有没有和当前元素id一样的,一样的话把pre里面的这个元素赋值给target,没有的话就赋值为undefined
Object.assign方法拷贝cur对象里面的值到目标对象也就是target里面,也就是如果target对象里面有cur对象里面的属性就覆盖,如果没有就添加
if…else…的意思就是如果在arr里面找到了id和arr1一样的就合并,没有找到的话就push添加进去
最后返回新数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值