You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除含areWeCreatingNewUser属性的对象(旧JS实现)

问题:移除数组中指定属性的元素(旧版JavaScript兼容)

原始对象

const obj = {
    "title": "sample",
    "status": 0,
    "creationDate": null,
    "userGroup": "",
    "signatureDelay": "2023-06-05T11:07:18.786Z",
    "listSign": [],
    "priority": false,
    "nature": null,
    "qesData": {
        "signatories": [
            {
                "displayName": "Some user",
                "email": "someuser@hotmail.com",
                "firstname": "User first name",
                "id": "4ffb81f6-6efd-4e41-9168-b032ab3e3b04",
                "lastname": "User last name",
                "locale": "en",
                "signatoryAttributes": []
            },
            {
                "email": "test@hotmail.com",
                "displayName": "",
                "areWeCreatingNewUser": true
            },
            {
                "email": "test1@hotmail.com",
                "displayName": "",
                "areWeCreatingNewUser": true
            }
        ]
    },
    "fileName": "sample.pdf",
};

需求

遍历obj.qesData.signatories数组,移除所有areWeCreatingNewUser属性为true的对象。

尝试的代码及问题

for(var i = 0;i < obj.qesData.signatories.length;i++) {
    if(obj.qesData.signatories[i].areWeCreatingNewUser) {
        obj.qesData.signatories.splice(i,1);
    }
}

这段代码的问题在于:删除第一个符合条件的元素(test@hotmail.com)后,数组长度缩短,后续元素的索引会自动前移。此时循环的i继续递增,会跳过下一个符合条件的元素(test1@hotmail.com),导致无法完全删除目标元素。

限制条件

必须使用旧版JavaScript,filter方法不可用。


解决方案

方法1:倒序遍历数组

从数组末尾开始往前遍历,删除元素时不会影响未遍历的元素索引,避免跳过目标项:

var signatories = obj.qesData.signatories;
for (var i = signatories.length - 1; i >= 0; i--) {
    if (signatories[i].areWeCreatingNewUser) {
        signatories.splice(i, 1);
    }
}

原理:倒序遍历过程中,当前删除的元素位于已遍历部分的前面,后面未遍历的元素索引不会因删除操作而改变,因此所有符合条件的元素都会被检查到。

方法2:删除元素后回退索引

在删除元素后,将索引i减1,抵消数组长度变化带来的索引偏移:

var signatories = obj.qesData.signatories;
for (var i = 0; i < signatories.length; i++) {
    if (signatories[i].areWeCreatingNewUser) {
        signatories.splice(i, 1);
        i--; // 回退索引,确保下一次循环能检查到前移后的元素
    }
}

原理:删除第i个元素后,后续元素会前移一位,此时i++会跳过新的第i个元素。通过i--,下一次循环的i++会刚好指向这个前移后的元素,保证不遗漏。


内容的提问来源于stack exchange,提问作者Code

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:40:25