ホームページ >ウェブフロントエンド >jsチュートリアル >プロパティ値に基づいて配列からオブジェクトを効率的に削除するにはどうすればよいですか?

プロパティ値に基づいて配列からオブジェクトを効率的に削除するにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-01 12:41:021029ブラウズ

How to Efficiently Remove Objects from an Array Based on a Property Value?

オブジェクト プロパティによる配列からのオブジェクトの削除

特定のプロパティに基づいて配列からオブジェクトを削除するには、ネイティブ JavaScript メソッドを利用し、スプライス中の長さの減少によって引き起こされる問題を回避します

まず、削除するオブジェクトを決定し、listToDelete などの変数に格納します。次に、オブジェクトの配列 (arrayOfObjects) を反復処理し、オブジェクトの ID プロパティが listToDelete 内のいずれかの ID と一致するかどうかを確認します。一致するものが見つかった場合は、splice を使用して arrayOfObjects からオブジェクトを削除します。

スプライス操作中に長さが減少する問題に対処するには、オブジェクトが削除されるたびに 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--;
  }
}
<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);
...
if (setToDelete.has(obj.id)) {...}

最後に、ロジックをカプセル化します。再利用可能な関数で便利に使用できます:

<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>

このアプローチは、プロパティ値を照合することで配列からオブジェクトを効果的に削除し、線形時間操作を回避することで最適なパフォーマンスを保証します。

以上がプロパティ値に基づいて配列からオブジェクトを効率的に削除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。