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

JavaScript:根据嵌套对象checked值过滤并保留目标数组元素

需求描述

我有一个对象数组,每个对象内部包含名为parents的子数组,需要过滤该子数组,仅保留其中checked字段值为true的元素。已尝试使用map、forEach、splice方法,但未得到预期结果。

输入数组示例:

[
    {
        "id": 1,
        "parent": "Parent 1",
        "parents": [
            {
                "label": "New Item",
                "editable": true,
                "children": [],
                "checked": true
            },
            {
                "label": "New Item",
                "editable": true,
                "children": [],
                "checked": false
            },
            {
                "label": "New Item",
                "editable": true,
                "children": [],
                "checked": true
            },
            {
                "label": "New Item",
                "editable": true,
                "children": [],
                "checked": false
            }
        ]
    },
    {
        "id": 1,
        "parent": "Parent 2",
        "parents": [
            {
                "label": "New Item",
                "editable": true,
                "children": [],
                "checked": true
            },
            {
                "label": "New Item",
                "editable": true,
                "children": [],
                "checked": false
            },
            {
                "label": "New Item",
                "editable": true,
                "children": [],
                "checked": true
            },
            {
                "label": "New Item",
                "editable": true,
                "children": [],
                "checked": false
            }
        ]
    }
]

预期输出结果:

[
    {
        "id": 1,
        "parent": "Parent 1",
        "parents": [
            {
                "label": "New Item",
                "editable": true,
                "children": [],
                "checked": true
            },
            {
                "label": "New Item",
                "editable": true,
                "children": [],
                "checked": true
            }
        ]
    },
    {
        "id": 1,
        "parent": "Parent 2",
        "parents": [
            {
                "label": "New Item",
                "editable": true,
                "children": [],
                "checked": true
            },
            {
                "label": "New Item",
                "editable": true,
                "children": [],
                "checked": true
            }
        ]
    }
]
解决方案

推荐使用map配合filter实现,这种方式不会修改原数组,逻辑清晰且无副作用:

const filteredArray = originalArray.map(item => ({
  ...item,
  parents: item.parents.filter(parent => parent.checked === true)
}));

逻辑说明

  • map遍历原数组的每个对象,通过扩展运算符...item保留原对象的所有原有属性
  • 对每个对象的parents子数组使用filter,仅保留checked为true的元素
  • 最终返回一个全新的数组,完全符合预期输出格式

如果需要直接修改原数组(不推荐,尽量保持数据不可变性),可以用forEach配合filter重新赋值:

originalArray.forEach(item => {
  item.parents = item.parents.filter(parent => parent.checked === true);
});

之前用splice失败大概率是因为遍历数组时修改了数组长度,导致索引错乱。filter直接返回过滤后的新数组,避免了这类问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:50:07