陣列交併差和去重
阿新 • • 發佈:2022-03-19
1、陣列去重
//普通方法 function uniqueArr(arr){ let result=arr.filter((item,index,arrs)=>{ return arrs.indexOf(item)==index }) return result; } function uniqueArr2(arr) { let obj = {}; return arr.filter(item => { if (!obj[item]) { obj[item] = true return true } }) } function uniqueArr3(arr) { let result = []; arr.forEach(item => { if (result.indexOf(item) == -1) { result.push(item); } }) return result ; } function uniqueArr4(arr) { let result = []; return arr.filter(item => { if (result.indexOf(item) == -1) { result.push(item); return true } }) //ES6 Set function uniqueArr(arr){ return [...new Set(arr)] } let newArr=uniqueArr([1,2,1,1,2,3]);//[1, 2, 3]
2、陣列交集
//普通方法 function intersectArr(arr1,arr2){ return arr2.filter((item2,index)=>{ let flag=false; arr1.forEach((item1,index)=>{ if(item1==item2)flag=true; }); return flag; }) } //ES6 Set function intersectArr(arr1,arr2){ return arr1.filter((item)=>new Set(arr2).has(item)); } intersectArr([1, 2, 4],[2,4,5])//[2,4]
3、陣列並集
//普通方法
function unionArr(arr1,arr2){
const newArr=arr1.concat(arr2);
return newArr.filter((item,index,arrs)=>arrs.indexOf(item)==index);
}
//ES6 Set
function unionArr(arr1,arr2){
return new Set([...arr1,...arr2]);
}
unionArr([1, 2, 4],[2,4,5])//[1, 2, 4, 5]
4、陣列差集
//普通方法 function diffArr(arr1,arr2){ return arr1.filter((item1)=>{ return arr2.every((item2)=>{ return item1!=item2 }) }); } //ES6 Set function diffArr(arr1,arr2){ return arr1.filter(item=>!new Set(arr2).has(item)); } let arr1 = [1, 2, 4] let arr2 = [2,4,5] diffArr(arr1,arr2)//arr1-arr2 [1] diffArr(arr2,arr1)//arr2-arr1 [5]