javascript配列は重い3種類の常用方法を総括します.
2369 ワード
第一は一般的な方法です.
考え方:
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());
ソース:http://www.jb51.net/article/46154.htm