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

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

Linda Hamilton
发布: 2024-11-02 20:36:30
原创
368 人浏览过

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板