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

Patricia Arquette
リリース: 2024-11-01 12:41:02
オリジナル
991 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート