Javascript數組去重的幾種方法

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);

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

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);
  1. 利用相鄰數組的比較,將與前一個元素不一樣的元素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);
  2. 利用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);
  1. 倒敘循環(避免刪除過程當中數組長度變化影響遍歷)排序過的數組,將與後一項相同的元素經過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);
相關文章
相關標籤/搜索