1. 程式人生 > 其它 >陣列交併差和去重

陣列交併差和去重

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]