數(shù)組里我們分為簡單數(shù)字或者字符串、對象的兩種數(shù)據(jù)結(jié)構(gòu),簡單數(shù)字或者字符串分別用
es5
和es6
來分別進(jìn)行交集,并集,補集,差集
- 數(shù)組是簡單數(shù)字或者字符串
-
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); //補集 兩個數(shù)組各自沒有的集合 let complement=[...arr1.filter(item=>arr2.indexOf(item)==-1),...arr2.filter(item=>arr1.indexOf(item)==-1)]; console.log("補集", complement); //差集 數(shù)組arr1相對于arr2所沒有的 let diff=arr1.filter(item=>arr2.indexOf(item)==-1); console.log("差集",diff);
es5方式的結(jié)果 -
ES6
方式//數(shù)組是簡單數(shù)字或者字符串的交集、并集、補集、差集 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); //補集 兩個數(shù)組各自沒有的集合 let complement=[...arr1.filter(item=>set2.has(item)==false),...arr2.filter(item=>set1.has(item)==false)]; console.log("補集", complement); //差集 數(shù)組arr1相對于arr2所沒有的 let diff=arr1.filter(item=>set2.has(item)==false); console.log("差集",diff);
es6方式的結(jié)果
-
- 數(shù)組里是對象的
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: "趙六" } ]; //交集(兩個數(shù)組相同的數(shù)據(jù)) let intersection=[]; arr1.forEach(x=>{ arr2.forEach(y=>{ if(x.age==y.age){//找到相同的就push進(jìn)新的數(shù)組 intersection.push(x); } }); }); console.log("交集",intersection); //并集(兩個數(shù)組的合并,數(shù)據(jù)都是唯一的,不重復(fù)) 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); //補集(兩個數(shù)組中除了相同的數(shù)據(jù)) 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); //差集(例如數(shù)組1中和數(shù)組2中不一樣的數(shù)據(jù)) 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);
數(shù)組里是對象的結(jié)果