JS配列は重さを取ります


四つのアルゴリズム
1.
Array.prototype.unique1 = function () {
    console.log(this.length);
    var n=[];//        
    for (var i = 0; i < this.length; i++) {
        //        i           ,    
        //      push       
        if (n.indexOf(this[i])==-1) {
            n.push(this[i]);
        };  
    }
    return n;
}
2.shで時間を変えます.
Array.prototype.unique2 = function(){
    var n = {}, r = [];//n hash ,r     
    for (var i = 0; i < this.length; i++) {
        if (!n[this[i]]) {//hash       
            n[this[i]] = true;//  hash 
            r.push(this[i]);//         push     
        } 
    }
    return r;
}
3.索引を使うか
Array.prototype.unique3 = function(){
    var n = [];//    
    for (var i = 0; i < this.length; i++) {
        //        i                 i
        //     i     ,   。        。
        if (this.indexOf(this[i]) == i) {
            n.push(this[i]);
        };
    };
    return n;
}
4.先に並べ替えを行う
Array.prototype.unique4 = function(){
    this.sort();
    var re = [this[0]];
    for (var i = 1; i< this.length; i++) {
        if (this[i] !== re[re.length-1]){
            re.push(this[i]);
        }
    };
    return re;
}
ps:第一及び第三の方法は配列−indexOf()を使用しています.ie 8及び以下の互換性の問題があります.「ieカスタム版indexOf方法」を再定義する必要があります.
if( !Array.indexOf )
{
Array.prototype.indexOf = function( obj ) { 
for( var i=0; i<this.length; i++ )
{
if( this[ i ] == obj )
{
return i;
}
}
return -1;
}
}
このうち、第1および第3の方法は、配列のindexOf方法を用いている.この方法の目的は、メモリパラメータが行列に初めて現れた場所を探すことです.jsエンジンはこの方法を実現する時、ターゲットが見つかるまで配列を遍歴することが明らかです.この関数は時間を無駄にします.第2の方法はsh表を使います.すでに現れたのを下付きの形式でobjectに預けます.下付きの参照はindexOfで検索するよりずっと速いです.