数组里我们分为简单数字或者字符串、对象的两种数据结构,简单数字或者字符串分别用
es5
和es6
来分别进行交集,并集,补集,差集
- 数组是简单数字或者字符串
-
ES5
方式let arr1=[1,2,3,4,5],arr2=[4,5,6,7,8]; //交集 let intersection=arr1.filter(item=>arr2.indexOf(item)>-1); console.log("交集",intersection); //并集 let union=arr1.concat(arr2.filter(item=>arr1.indexOf(item)==-1)); console.log("并集", union); //补集 两个数组各自没有的集合 let complement=[...arr1.filter(item=>arr2.indexOf(item)==-1),...arr2.filter(item=>arr1.indexOf(item)==-1)]; console.log("补集", complement); //差集 数组arr1相对于arr2所没有的 let diff=arr1.filter(item=>arr2.indexOf(item)==-1); console.log("差集",diff);
-
ES6
方式//数组是简单数字或者字符串的交集、并集、补集、差集 es6 let arr1=[1,2,3,4,5],arr2=[4,5,6,7,8]; let set1=new Set(arr1),set2=new Set(arr2); //交集 let intersection=arr1.filter(item=>set2.has(item)); console.log("交集",intersection); //并集 let union=Array.from(new Set([...arr1,...arr2]));; console.log("并集", union); //补集 两个数组各自没有的集合 let complement=[...arr1.filter(item=>set2.has(item)==false),...arr2.filter(item=>set1.has(item)==false)]; console.log("补集", complement); //差集 数组arr1相对于arr2所没有的 let diff=arr1.filter(item=>set2.has(item)==false); console.log("差集",diff);
-
- 数组里是对象的
let arr1=[ { age: 1, name: "张三" },{ age: 2, name: "李四" },{ age: 3, name: "王五" },{ age: 4, name: "赵六" } ]; let arr2=[ { age: 5, name: "Li" },{ age: 6, name: "judy" },{ age: 3, name: "王五" },{ age: 4, name: "赵六" } ]; //交集(两个数组相同的数据) let intersection=[]; arr1.forEach(x=>{ arr2.forEach(y=>{ if(x.age==y.age){//找到相同的就push进新的数组 intersection.push(x); } }); }); console.log("交集",intersection); //并集(两个数组的合并,数据都是唯一的,不重复) let union=[...arr1, ...arr2]; arr1.forEach(x=>{ arr2.forEach(y=>{ if(x.age==y.age){//找到相同的就删除 union.splice(union.findIndex(item=>item.age==x.age),1); } }); }); console.log("并集", union); //补集(两个数组中除了相同的数据) let complement=[...arr1, ...arr2]; arr1.forEach(x=>{ arr2.forEach(y=>{ if(x.age==y.age){//找到就删除,删除完相同的 complement.splice(complement.findIndex(item=>item.age==x.age),1); complement.splice(complement.findIndex(item=>item.age==y.age),1); } }); }); console.log("补集", complement); //差集(例如数组1中和数组2中不一样的数据) let diff=[...arr1]; arr1.forEach(x=>{ let flag=arr2.some(y=>x.age==y.age); if(flag){//如果有相同的就删除 diff.splice(diff.findIndex(item=>item.age==x.age),1); } }); console.log("差集", diff);