ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript で配列オブジェクトをプロパティ値で効率的にフィルタリングする方法
プロパティ値による配列オブジェクトのフィルタリング
特定のプロパティに基づいて配列からオブジェクトを効率的に削除するには、次の解決策を検討してください。
1.インプレース フィルタリング:
配列の長さを正しくデクリメントするには、項目を削除した後に i をデクリメントします:
<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--; } }
2。要素の上書き:
線形時間の削除を避けるために保持したい要素を上書きします:
<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;
3.ハッシュ セットの最適化:
最新のランタイムの場合、ハッシュ セットを使用してルックアップを高速化します:
<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;
4.再利用可能な関数 (オプション):
フィルタリング操作を再利用可能な関数でラップします:
<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; }; const toDelete = new Set(['abc', 'efg']); const arrayOfObjects = [{id: 'abc', name: 'oh'}, {id: 'efg', name: 'em'}, {id: 'hij', name: 'ge'}]; filterInPlace(arrayOfObjects, obj => !toDelete.has(obj.id)); console.log(arrayOfObjects); // [{id: 'hij', name: 'ge'}]</code>
これらのソリューションは、指定されたプロパティ値に基づいて、配列からオブジェクトを効率的にフィルタリングして削除します。
以上がJavaScript で配列オブジェクトをプロパティ値で効率的にフィルタリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。