如何过滤嵌套对象数组 移除closedRequest中指定ID的元素
问题原因
你的代码没生效是两个核心问题:
Array.filter()不会修改原数组,执行后会返回一个过滤完成的新数组。你之前的代码只是调用了filter拿到结果,但没有把结果赋值回原字段,所以原数据不会有任何变化。- 字段名不匹配:你给出的示例数据里字段是
closedRequest(单数)、子项id字段是id,但你写的代码里用了closedRequests(复数)、cr.requestID做判断,字段名写错也会导致逻辑失效。
实现代码
如果你要保留原有对象结构、直接修改原对象的closedRequest字段,用下面的写法即可:
// 替换成你要删除的目标id,比如示例里要删id=3就填3 const removeId = 3; client.contracts.forEach(c => { // 请根据实际数据核对字段名:closedRequest/closedRequests、id/requestID c.closedRequest = c.closedRequest.filter(cr => cr.id !== removeId); });
执行完成后原client.contracts的结构就和你预期的结果一致。
如果你不想修改原始数据、需要生成无副作用的全新过滤后副本,可以用map实现:
const removeId = 3; const filteredResult = { contracts: client.contracts.map(c => ({ ...c, closedRequest: c.closedRequest.filter(cr => cr.id !== removeId) })) };
提示:运行前务必核对字段名和你实际业务数据一致,避免因为字段拼写错误导致过滤不生效。
内容的提问来源于stack exchange,提问作者EMV
相关产品推荐
相关产品推荐

