実装アイデア: 新しい配列を作成し、受信配列を走査し、値が新しい配列にない場合は値を追加します。 注: 値が配列内にあるかどうかを判断するメソッド「indexOf」は、ECMAScript5 メソッドです。 IE8 以前ではサポートされていません。下位バージョンのブラウザと互換性のあるコードを作成する必要があります:
//最も単純な配列の重複排除方法
function unique1(array){
var n = []; new 一時配列
//現在の配列を走査します
for (var i = 0; i
//それ以外の場合は、現在の項目を一時配列にプッシュします
if (n.indexOf(array[i]) == -1) n.push(array[i]);
}
return n;
}
オブジェクトのキーと値のペアのメソッド
実装のアイデア: 新しい js オブジェクトと新しい配列を作成します。受信した配列を走査するときに、値が js オブジェクトのキーであるかどうかを判断します。そうでない場合は、キーを追加します。オブジェクトに追加し、それを新しい配列に入れます。注: js オブジェクト キーであるかどうかを判断する際、受信キーに対して "toString()" が自動的に実行されます。たとえば、a[1]、a["1"] などです。上記の問題を解決するには、やはり「indexOf」を呼び出す必要があります。
// 最も速く、最も多くのスペースを占有します (スペースは時間と交換されます)
function unique2(array){
var n = {}, r = [], len = array.length, val, type;
for (var i = 0; i val = array[i];
type = typeof val;
if (!n[val]) {
n[val] = [type];
r.push(val); Return r ;
}
配列の添字判定方法
実装アイデア: 現在の配列の i 番目の項目が最初に現在の配列の i 以外の位置に出現する場合、それは意味します。 i 番目の項目は繰り返され、無視されます。それ以外の場合は、結果の配列を保存します。
function unique3(array){
//2 番目の項目から開始してトラバースします
for(var i = 1; i }
return n;
}
ソート後の隣接削除メソッド
実装のアイデア: ソート後に同じ値が隣接するように受信配列をソートし、トラバース時に前の値と重複しない値のみを新しい配列に追加します。
//同じ値を隣接し、重複する値を削除する
function unique4(array){
var re=[array[0]];
for(var i = 1 ; i if( array[i] !== re[re.length-1]) { re.push(array[i]);
}
}
return re ;
}
配列トラバーサル手法の最適化
実装アイデア: 反復せずに右端の値を取得し、それを新しい配列に入れます。 (重複値が検出された場合、現在のループを終了し、次の最上位ループの判定に移ります)
// アイデア: 重複のない右端の値を取得し、新しい配列に入れます
function unique5(array){
var r = [];
for(var i = 0, l = array.length; i for(var j = i + 1; j if (array[i] === array[j]) j = ++i;
r.push(array[i] ] );
}
return r;
}