js 对象数组的交集补集和并集

Posted mingL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
},[])

 

以上是关于js 对象数组的交集补集和并集的主要内容,如果未能解决你的问题,请参考以下文章

java求交集和并集

EXCEL交集并集问题

excel怎么做交集和并集?

java 求交集 并集 差集

java数组的交集和并集

PHP数组的几个操作,求并集,交集,差集,数组