一道題目學ES6 API,合並對象id相同的兩個數組對象


var arr2=[{id:1,name:'23'}]
var arr1=[{id:1,car:'car2'}]
const combined = arr2.reduce((acc, cur) => {
    const target = acc.find(e => e.id === cur.id);
    console.log(target)
    if (target) {
        Object.assign(target, cur);
    } else {
        acc.push(cur);
    }
    return acc;
}, arr1);
console.log(combined);

arr2.reduce(function(acc,cur),arr1):reduce方法傳入的函數的第一個參數acc是數組元素的累計值,reduce方法的第二參數arr1是指定累計值acc的初始值。

所以一開始acc的值就是arr1,cur的值是arr2[0].

const target = acc.find(e => e.id === cur.id); target返回的是在arr1中id與arr2[0].id值相同的對象:即{id:1,name:'23'}

例如var target = [{id:1},{id:2}].find(e=> e.id==1)//target的值為{id:1}

Object.assign(target, cur)//將cur中的值復制到target中,若是相同屬性就覆蓋,若是不同屬性就添加 

 

例如:Object.assign({id:1,name:'23'},{id:1,car:'car1'})//結果是得到對象{id: 1, name: "23", car: "car1"}

上面if...else...語句的意思就是,在arr1數組中找到了與arr2數組元素相同的id的就合並,沒有找到就講arr2數組的該元素push到arr1數組中,最后得到的acc及arr1與arr2合並后的數組。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM