1. 程式人生 > >Javascript數組去重的幾種方法

Javascript數組去重的幾種方法

lar ID 數組元素 去重 變化 urn es6 復制 [1]

Javascript數組去重的幾種方法

  1. 新建空數組,通過for...of(ES6)循環遍歷,通過indexOf判斷元素是否在新數組中存在,將不存在的(indexOf(n)==-1)元素push到新數組中:

       let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2];
    
       function removeDup_indexOf(originalArr){
        let newArr = [];
        for(n of originalArr){
            if(newArr.indexOf(n)==-1){
                newArr.push(n);
            }
        }
        return newArr;
       }
       let arr1 = removeDup_indexOf(arr);

    也可首先將原始數組的第一項放到新數組中,從第二項開始循環判斷:

     let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2];
     function removeDup_index(originalArr){
        //index=0的項先加到數組裏,之後從第二項開始循環
        let newArr = [originalArr[0]];
        for(var i=1;i<originalArr.length;i++){
            if(originalArr.indexOf(originalArr[i])==i){
                newArr.push(originalArr[i]);
            }
        }
        return newArr;
       }
       let arr2 = removeDup_index(arr);
  2. 利用相鄰數組的比較,將與前一個元素不同的元素push到數組中,註意:這種方式要首先將數組進行排序,用slice()方法深拷貝原始數組進行排序,避免對原數組造成影響。

    let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2];
    function compareAdjoin(originalArr){
           let orderedArr = originalArr.slice().sort();//先進行排序,然後相鄰的數組元素進行比較
           let newArr = [orderedArr[0]];
           for(var i=1;i<orderedArr.length;i++){
                if(orderedArr[i]!=orderedArr[i-1]){
                    newArr.push(orderedArr[i]);
                }
           }
           return newArr;
       }
       let arr3 = compareAdjoin(arr);
  3. 利用object{key:value}, key值不能重復的特性。創建一個新的obj{ },將數組的每個元素作為key添加到obj中,並將obj[arr[i]]不存在的元素push到新數組中 ,obj= { arr[1]: value,arr[2]:value...}註意:無需關註value的值,可任意復制,僅是通過key判斷元素是否已添加過。

     let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2];
     function removeDup_obj(originalArr){
            let newArr=[];
            let obj={};
            for(n of originalArr){
                if(!obj[n]){
                    obj[n] = 1;
                    newArr.push(n);
                }
            }
            return newArr;
       }
       let arr4 = removeDup_obj(arr);
  4. 倒敘循環(避免刪除過程中數組長度變化影響遍歷)排序過的數組,將與後一項相同的元素通過splice方法從原數組中刪除,同#2,首先將數組進行排序,用slice()方法深拷貝原始數組進行排序,避免對原數組造成影響。

     let arr = [1,1,2,2,3,6,3,77,88,5,98,9,7,2,7,5,3,4,2];
     function removeDup_splice(originalArr){
           let orderedArr = originalArr.slice().sort();
           for(var i = orderedArr.length-1;i>0;i--){
                if(orderedArr[i-1]===orderedArr[i]){
                    orderedArr.splice([i-1],1);
                }
           }
           return orderedArr;
       }
       let arr5 = removeDup_splice(arr);

Javascript數組去重的幾種方法