js配列の重い常用方法のまとめ
3998 ワード
面接の前に準備しなければならない問題は、JavascriptのArayの重複項目をどうやって取り除くかです.
いくつかの方法をまとめました.
第一は一般的な方法です.
考え方:
1.新しい配列保存結果を構築する
2.forサイクルでは、元の配列から要素を取り出すたびに、この要素の循環と結果配列を用いて比較します.
3.結果配列にこの要素がないと結果配列に保存されます.
考え方:
1.最初に元の配列を並べ替えます.
2.元の配列のi番目の要素と結果配列の最後の要素が同じかどうかを確認します.順序付けされているので、重複要素は隣の位置にあります.
3.同じでない場合は、結果配列にその要素を保存します.
第三の方法(推奨使用)
考え方:
1.新しい配列保存結果を作成します.
2.空のオブジェクトを作成します.
3.forループの場合、要素を取り出してオブジェクトと比較します.この要素が重複していない場合は、結果配列に保存し、同時にこの要素の内容を対象の属性とし、値を1として与え、第2ステップのオブジェクトに保存します.
説明:どのように対比するかというと、元の配列から要素を取り出して、対象の中にこの属性を訪問します.値にアクセスできれば、重複を説明します.
いくつかの方法をまとめました.
第一は一般的な方法です.
考え方:
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;;