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 对象数组的交集补集和并集的主要内容,如果未能解决你的问题,请参考以下文章