如何在嵌套JSON中根据指定键值查找并删除目标对象
嵌套JSON数组指定条目删除实现方案
实现目标
在保持原JSON对象所有顶层字段完全不变的前提下,从subjects数组中删除key属性值为mat的对应条目,适配数组内存在数十个对象的常规业务场景。
可选实现方案
通用业务场景优先:使用数组
filter方法过滤
这是最无副作用的实现方式,逻辑清晰,无需手写复杂循环,即使数组条目量较大也能满足性能要求:// 直接过滤掉key为mat的条目,生成新的subjects数组 obj.subjects = obj.subjects.filter(item => item.key !== 'mat')如果是需要保持原对象引用不变(比如前端状态管理的不可变更新场景),可以用对象展开语法生成全新对象,不会触发原对象的属性劫持监听异常:
const updatedObj = { ...obj, // 仅替换subjects字段为过滤后的结果,其余字段完全继承原对象 subjects: obj.subjects.filter(item => item.key !== 'mat') }超大数组场景:用索引定位后精准删除
当subjects数组条目量达到千级以上,全量遍历过滤的性能会有小幅损耗,此时可以用findIndex先定位匹配条目的位置,再执行精准删除:// 定位匹配条目的索引 const targetIndex = obj.subjects.findIndex(item => item.key === 'mat') // 仅在找到匹配条目时执行删除,避免无意义操作 if (targetIndex !== -1) { obj.subjects.splice(targetIndex, 1) }
方案效果
两种实现方式最终输出的结构都和要求的目标结构完全一致:subjects数组内仅保留key为eng的英语科目条目,其余id、name、level、homeroom_teacher等顶层字段全程不做任何改动。
内容的提问来源于stack exchange,提问作者celoaga
相关产品推荐
相关产品推荐

