首頁 >web前端 >js教程 >JavaScript中如何根據物件屬性有效率地從陣列中刪除物件?

JavaScript中如何根據物件屬性有效率地從陣列中刪除物件?

Linda Hamilton
Linda Hamilton原創
2024-11-02 20:36:30366瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn