二種類のよく使うjavascript配列は方法の構想とコードを重視します.
1614 ワード
第一は、従来の方法の考え方を比較することである.1.新しい配列保存結果を構築する2.forサイクルでは、元の配列から要素を取り出すたびに、indexOfで新しい配列にこの要素があるかどうかを検索する.3.ない場合は、結果配列に保存する.
考え方:
1.最初に元の配列を並べ替えます.
2.元の配列のi番目の要素と結果配列の最後の要素が同じかどうかを確認します.順序付けされているので、重複要素は隣の位置にあります.
3.同じでない場合は、結果配列にその要素を保存します.
Array.prototype.unique1 = function(){
var res = [];
for(var i = 0; i < this.length; i++){
if(res.indexOf(this[i]) == -1){
res.push(this[i]);
}
}
return res;
}
var arr = [1, 'a', 'a', 'b', 'd', 'e', 'e', 1, 0]
alert(arr.unique1())
この基礎の上で少し優良化することができて、しかし原理は不変で、効果も明らかではありません.
Array.prototype.unique1 = function(){
var res = [this[0]];//
for(var i = 1; i < this.length; i++){//
if(res.indexOf(this[i]) == -1){
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())