1 つ目は、より従来的な方法です
もの:
1. 結果を保存する新しい配列を構築します
2. for ループのたびに、元の配列から 1 つの要素が取り出され、この要素がループと結果の配列の比較に使用されます
3. 要素が結果配列に存在しない場合は、結果配列に要素を格納します
Array.prototype.unique1 = function(){
var res = [this[0]];
for(var i = 1; i < this.length; i ){
varrepeat = false;
for(var j = 0; 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 ());
2 番目の方法は上記の方法よりも効率的です
もの:
1. 最初に元の配列をソートします
2. 元の配列の i 番目の要素が結果の配列の最後の要素と同じかどうかを確認します。ソートされているため、重複した要素は隣接する位置にあります。
3. 異なる場合は、結果の配列に要素を格納します。
Array.prototype.unique2 = function(){
this.sort(); //最初にソートします
var res = [this[0]];
for(var i = 1; 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());
2 番目の方法にも、重複排除の前にソートされるため、特定の制限があります。最終的に返された重複排除 結果もソートされます。配列の順序を変更せずに重複を削除する必要がある場合、この方法はお勧めできません。
3 番目の方法 (推奨)
もの:
1. 結果を保存する新しい配列を作成します
2. 空のオブジェクトを作成します
3. for ループ中に、要素が抽出され、オブジェクトと比較されるたびに、要素が繰り返されない場合は、その要素の内容が使用されます。オブジェクトの属性として値 1. が割り当てられ、ステップ 2 で作成されたオブジェクトに保存されます。
説明: 比較方法としては、毎回元の配列から要素を1つ取り出し、オブジェクト内のこの属性にアクセスできれば、それが繰り返されているということになります。
Array.prototype.unique3 = function() {
var res = [];
var json = {};
for(var i = 0; i
if(!json[this[i ]]) {
res.push(this[i]);
json[this[i]] = 1;
}
}
return res;
}
var arr = [112,112,34,'Hello',112,112,34,'Hello','str','str1'];alert(arr.unique3());