首页 >web前端 >js教程 >JavaScript中如何根据对象属性高效地从数组中删除对象?

JavaScript中如何根据对象属性高效地从数组中删除对象?

Linda Hamilton
Linda Hamilton原创
2024-11-02 20:36:30368浏览

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