プロトタイプを使用した JavaScript 配列の重複の特定
JavaScript では、配列から重複した値を削除することが必要になることがよくあります。一般的なアプローチの 1 つは、以下に示すように、カスタム 'getUnique' 関数を使用して配列プロトタイプを拡張することです。
Array.prototype.getUnique = function() { var o = {}, a = [], i, e; for (i = 0; e = this[i]; i++) {o[e] = 1}; for (e in o) {a.push (e)}; return a; }
ただし、配列にゼロ値が含まれている場合、このスクリプトでは問題が発生します。その理由を理解するために、問題を詳しく調べてみましょう。
「getUnique」関数は、オブジェクト「o」を値の一時ストレージとして利用します。これは、文字列やゼロ以外の数値など、オブジェクト キーとして機能する値に適しています。ただし、JavaScript は数値ゼロ (「0」) を偽の値として扱います。これは、「o[0]」が「偽」と評価されることを意味します。
オブジェクト キーを反復処理する場合、偽の値はスキップされ、その結果、結果として得られる一意の配列からのゼロの省略。この動作は、ゼロを有効な一意の値として扱うという意図された操作とは異なります。
フィルターを使用したネイティブ ソリューション
最新の JavaScript 環境 (ES5 以降) 'filter' メソッドを使用すると、より簡潔で効率的なアプローチが利用できます。
function onlyUnique(value, index, array) { return array.indexOf(value) === index; } // usage example: var a = ['a', 1, 'a', 2, '1']; var unique = a.filter(onlyUnique); console.log(unique); // ['a', 1, 2, '1']
'filter' メソッドは次のようになります。新しい配列に含まれる一意の要素ごとに「true」を返すコールバック関数。この場合、コールバックは配列内の現在の要素のインデックスがコールバック内の位置と一致するかどうかをチェックし、その一意性を確認します。このアプローチはオブジェクト キーに依存せず、ゼロ値を正しく処理します。
以上がゼロを含む重複する値を JavaScript 配列から効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。