ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript のオブジェクト プロパティに基づいて配列からオブジェクトを効率的に削除する方法

JavaScript のオブジェクト プロパティに基づいて配列からオブジェクトを効率的に削除する方法

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-02 20:36:30365ブラウズ

How to Efficiently Remove Objects from an Array Based on Object Property in 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 サイトの他の関連記事を参照してください。

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