js配列の重い常用方法のまとめ

3998 ワード

面接の前に準備しなければならない問題は、JavascriptのArayの重複項目をどうやって取り除くかです.
いくつかの方法をまとめました.
第一は一般的な方法です.
考え方:
1.新しい配列保存結果を構築する
2.forサイクルでは、元の配列から要素を取り出すたびに、この要素の循環と結果配列を用いて比較します.
3.結果配列にこの要素がないと結果配列に保存されます.
 
   
Array.prototype.unique1 = function(){
var res = [this[0]];
for(var i = 1; i < this.length; i++){
var repeat = false;
for(var j = 0; j < res.length; j++){
if(this[i] == res[j]){
repeat = true;
break;
}
}
if(!repeat){
res.push(this[i]);
}
}
return res;
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique1());

第二の方法は上記の方法より効率が高いです.
考え方:
1.最初に元の配列を並べ替えます.
2.元の配列のi番目の要素と結果配列の最後の要素が同じかどうかを確認します.順序付けされているので、重複要素は隣の位置にあります.
3.同じでない場合は、結果配列にその要素を保存します.
 
   
Array.prototype.unique2 = function(){
this.sort(); //
var res = [this[0]];
for(var i = 1; i < this.length; i++){
if(this[i] !== res[res.length - 1]){
res.push(this[i]);
}
}
return res;
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique2());

第二の方法にも一定の限界があります.重いものに行く前に並べ替えをしたので、最後に戻ったものは並べ替えの結果です.配列の順序を変えずに重いものを求めるなら、この方法は好ましくない.
第三の方法(推奨使用)
考え方:
1.新しい配列保存結果を作成します.
2.空のオブジェクトを作成します.
3.forループの場合、要素を取り出してオブジェクトと比較します.この要素が重複していない場合は、結果配列に保存し、同時にこの要素の内容を対象の属性とし、値を1として与え、第2ステップのオブジェクトに保存します.
説明:どのように対比するかというと、元の配列から要素を取り出して、対象の中にこの属性を訪問します.値にアクセスできれば、重複を説明します.
 
   
Array.prototype.unique3 = function(){
var res = [];
var json = {};
for(var i = 0; i < this.length; i++){
if(!json[this[i]]){
res.push(this[i]);
json[this[i]] = 1;
}
}
return res;
}

var arr = [112,112,34,' ',112,112,34,' ','str','str1'];
alert(arr.unique3());

第一種類:最も愚かなのでしょう.Aray.prototype.unique 1=function()    var=new Aray();    label:for(var i=0,n=this.length;i<n;i++){        for(var x=0,y=r.length;x<y;x+){            if(r[x]==this[i]                continue label            }         }         r[r.length]=this[i]    }     return;t 2番目:これは正則天書と同じです.アラy.prototype.unique 2=function(){    return this.sort().jon(",",").replace(/",",",",",",",",",",",").replace(/,",",",",",",",",",",").replace(/,",",",",",",",",",",",",",",",","),",",",",",",",",",",",",",","",",",",",",",",",",",",",",",",",",",",","    var temp={}len=this.length;    for(var i=0;i<len;i+) {        var tmp=this[i]        if(!temp.hasOwnProperty(tmp){            temp[this[i]=「my god」        }     }        len=0    var temparr=[];    for(var i in temp){        temparr[len+]=i    }     return temparr}の4番目の種類は、前件より後件の順に並べられます.この方法は簡単ですが、実用的です.array.prototype.unique 4=function(){    var temp=new Aray();      this.sort();      for(i=0;i<this.length;i+){          if(this[i]==this[i+1]            contine;        }           temp[temp.length]=this[i]      }       return temp;   }   以下は以前よく使われていましたが、効率もいいです.hash表みたいな感じがします.アラy.prototype.unique 5=function()    var res=[],hash={}    for(var i=0,elem;(elem=this[i]!=null;i+) {        if(!hash[elem])        {            res.push(elem)            hash[elem]=true;        }     }     return ress;;