js中實現數組去重


法一:

創建一個新的臨時數組來保存數組中已有的元素,indexOf()可以遍歷數組

var a = new Array(1,2,2,2,2,5,3,2,9,5,6,3);
Array.prototype.unique1 = function(){
    var n = [];     //一個新的臨時數組
    for(var i=0; i<this.length; i++){
        //如果把當前數組的第i已經保存進了臨時數組, 那么跳過
        if(n.indexOf(this[i]) == -1){
            n.push(this[i]);
        }
    }
    return n;
}
console.log(a.unique1());

法二:

使用哈希表存儲已有的元素

Array.prototype.unique2 = function(){
    var hash = {},
        n = [];     //hash 作為哈希表, n為臨時數組
    for(var i=0; i<this.length; i++){
        if(!hash[this[i]]){         //如果hash表中沒有當前項
            hash[this[i]] = true;   //存入hash表
            n.push(this[i]);        //當前元素push到臨時數組中
        }
    }
    return n;
}

法三:

使用indexOf判斷數組元素第一次出現的位置是否為當前位置,indexOf()可以遍歷數組

Array.prototype.unique3 = function(){
    var n = [this[0]]; 
    for(var i=1; i<this.length; i++)    //從第二項開始遍歷
    {
        //如果當前數組元素在數組中出現的第一次的位置不是i
        //說明是重復元素
        if(this.indexOf(this[i]) == i){
            n.push(this[i]);
        }
    }
    return n;
}

法四:

先排序再去重

Array.prototype.unique4 = function(){
    this.sort(function(a, b){ return a - b;});
    var n = [this[0]];
    for(var i=1; i<this.length; i++){
        if(this[i] != this[i-1]){
            n.push(this[i]);
        }
    }
    return n;
}

 法五:

首先利用 new Set() 把數組去重,但是這個方法會有一個問題,去重之后會變成 偽數組,然后在用 Array.from() 方法把偽數組轉換為數組

var arr = [11,22,33,44,22,33];
var a = new Set(arr);
Array.from(a);
//輸出結果為 [11,22,33,44]

 代碼可以簡化為

var arr = [11,22,33,44,22,33];
Array.from(new Set(arr));

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM