数组 交并补
var a=[1,2,3,5,7,8,9] var b=[5,4,6,34,6,8,7] // 交 a.filter(item=>b.includes(item)) // 并 [...new Set(a.connect(b))] // 补 a.filter(item=>!b.includes(item))
对象 交并补
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;
},[])

原文:https://www.cnblogs.com/lexiaoyao1992/p/13036449.html