首頁 >web前端 >js教程 >JavaScript如何實作陣列去重? js中數組去重的三種方法(程式碼實例)

JavaScript如何實作陣列去重? js中數組去重的三種方法(程式碼實例)

青灯夜游
青灯夜游原創
2018-10-15 13:37:303907瀏覽

JavaScript中如何實作陣列去重?本篇文章就跟大家介紹在js中陣列去重的三種常用方法。有一定的參考價值,有需要的朋友可以參考一下,希望對你們有幫助。

下面我們就透過簡單程式碼範例來介紹js中陣列去重的三種常用方法

第一種方法:for迴圈(兩次) 新陣列

#思路:

1.建立一個新的陣列存放結果

2.for迴圈中每次從原始數組中取出一個元素,用這個元素循環與結果數組對比

3.若結果數組中沒有該元素,則存到結果數組中

//方法一
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
function removeDuplicatedItem(arr) {
   for(var i = 0; i < arr.length-1; i++){
       for(var j = i+1; j < arr.length; j++){
           if(arr[i]==arr[j]){
              arr.splice(j,1);//console.log(arr[j]);
              j--;
           }
       }
   }
   return arr;
}

arr2 = removeDuplicatedItem(arr);
console.log(arr);
console.log(arr2);

第一種方法就可以基本滿足我們的需求了,對arr = [1,23,1,1,1,3,23,5,6, 7,9,9,8,5]這樣的簡單陣列只要用型別比較就可以了,但如果陣列很長呢?如此遍歷數組,數組長度為n,那麼時間複雜度為n*n。顯然第一種方法的性能還有待提升。接下來是第二種方法,用到陣列排序,在排序的過程移除重複的值。

第二種方法:for迴圈(一次) sort()排序新陣列

原始陣列長度不變但被依字串順序排序,借助新數組 ,判斷新數組中是否存在該元素如果不存在則將此元素添加到新數組中

//方法二
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
function removeRepEle(ar) {
    var ret = [],
        end;//临时变量用于对比重复元素
    ar.sort();//将数重新组排序
    end = ar[0];
    ret.push(ar[0]);
    for (var i = 1; i < ar.length; i++) {
        if (ar[i] != end) {//当前元素如果和临时元素不等则将此元素添加到新数组中
            ret.push(ar[i]);
            end = ar[i];
        }
    }
    return ret;
}

arr2 = removeRepEle(arr);
console.log(arr);//[ 1, 1, 1, 1, 23, 23, 3, 5, 5, 6, 7, 8, 9, 9 ]
console.log(arr2);//[ 1, 23, 3, 5, 6, 7, 8, 9 ]

第二種方法有一定的局限性,因為數組是先進行排序,然後再去重的,所以最後回傳的結果是js數組去重併排序後的結果。如果要求不改變數組的順序去重,那這種方法就不可取了。

第三種方法(建議):for迴圈(一次) 新陣列新物件

利用空物件來記錄新陣列中已經儲存過的元素

//方法三 
var arr = [1,23,1,1,1,3,23,5,6,7,9,9,8,5];
var o={};
var new_arr=[];
for(var i=0;i<arr.length;i++){
    var k=arr[i];
    if(!o[k]){
        o[k]=true;
        new_arr.push(k);
    }
}
console.log(new_arr);

總結:以上就是這篇文章的全部內容,希望能對大家的學習有所幫助。更多相關教學請造訪JavaScript影片教學jQuery影片教學bootstrap教學

以上是JavaScript如何實作陣列去重? js中數組去重的三種方法(程式碼實例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn