js 對象數組的交集補集和並集


先易后難,先對最簡單的一維數字數組求交並補

var a=[1,2,3,5,6];
var b=[1,2,6,7,8]
// 交集
a.filter(item=>b.includes(item));
// 並集
[...new Set(a.concat(b))]
// 補集
a.filter(item=>!b.includes(item));

對象數組也相差無幾,每個對象都有一個唯一的標識的id

var a=[
    {id:'001',name:'zhangsan'},
    {id:'002',name:'tom'},
    {id:'003',name:'jack'},
    {id:'004',name:'fei'},
    {id:'005',name:'ming'}
    ];
var b=[
    {id:'003',name:'jack'},
    {id:'005',name:'ming'},
    {id:'007',name:'hello'},
    {id:'008',name:'milk'},

];
var obj={};
var arr=a.concat(b);
// 交集:定義一個對象,通過其屬性值是否出現多次判斷交集
arr.reduce(function(pre,cur){
    obj.hasOwnProperty(cur.id)?pre.push(cur):obj[cur.id]=true;
    return pre;
},[]);
// 並集:每次遍歷將還未出現的項進行收集
arr.reduce(function(pre,cur){
    if(!obj.hasOwnProperty(cur.id)){
        pre.push(cur);
    }
    obj[cur.id]=true;
    return pre;
},[])
//補集:a中每一項都不在b中
let test=a.reduce(function(pre,cur){
    if(b.every(item=>item.id!==cur.id)){
        pre.push(cur)
    }
    return pre;
},[])

 


免責聲明!

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



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