ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript のオブジェクト プロパティに基づいて配列からオブジェクトを効率的に削除する方法
オブジェクトのプロパティに基づいて配列からオブジェクトを削除する
JavaScript では、特定のプロパティに一致させて配列からオブジェクトを削除するのが難しい場合があります。これは、一般的に試みられるように、スプライス メソッドを使用すると、削除が発生するため配列の長さが減少するためです。
スプライス メソッドの使用に関する修正
この問題を解決するには、次のようにします。削除が発生したときにループ インデックスをデクリメントすることで修正を実装できます。
<code class="javascript">for (var i = 0; i < arrayOfObjects.length; i++) { var obj = arrayOfObjects[i]; if (listToDelete.indexOf(obj.id) !== -1) { arrayOfObjects.splice(i, 1); i--; } }
配列要素を上書き
または、段階的に実行することで線形時間の削除を回避できます。保持したい配列要素を上書きします:
<code class="javascript">var end = 0; for (var i = 0; i < arrayOfObjects.length; i++) { var obj = arrayOfObjects[i]; if (listToDelete.indexOf(obj.id) === -1) { arrayOfObjects[end++] = obj; } } arrayOfObjects.length = end;
検索用のハッシュ セット
効率的な検索のために、ハッシュ セットを利用できます:
<code class="javascript">const setToDelete = new Set(listToDelete); let end = 0; for (let i = 0; i < arrayOfObjects.length; i++) { const obj = arrayOfObjects[i]; if (setToDelete.has(obj.id)) { arrayOfObjects[end++] = obj; } } arrayOfObjects.length = end;
ヘルパー関数
このアプローチをヘルパー関数にカプセル化します:
<code class="javascript">const filterInPlace = (array, predicate) => { let end = 0; for (let i = 0; i < array.length; i++) { const obj = array[i]; if (predicate(obj)) { array[end++] = obj; } } array.length = end; };</code>
以上がJavaScript のオブジェクト プロパティに基づいて配列からオブジェクトを効率的に削除する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。