如何过滤嵌套对象数组中mIP为'1234'的JSON数据?
解决方案
要实现你需要的过滤效果,可以结合filter和map方法分两步处理数据:先筛选出包含目标mIP的pDet项,再对每个保留项的pMem数组做精准过滤,同时保留原对象的其他字段。
代码实现
const json = { address: "fdqn", pDet: [ { pNam: "pnam1", pMem: [ { mIP: "1234", gp: "gp1" }, { mIP: "567", gp: "gp2" }, { mIP: "890", gp: "gp3" } ] }, { pNam: "pnam1", pMem: [ { mIP: "4567", gp: "gp5" }, { mIP: "5674", gp: "gp7" } ] } ] }; const targetMIP = "1234"; const filteredJson = { ...json, // 保留原对象的所有顶级字段(比如address) pDet: json.pDet // 第一步:过滤出pMem中存在目标mIP的pDet项 .filter(pDetItem => pDetItem.pMem.some(mem => mem.mIP === targetMIP)) // 第二步:对每个保留的pDet项,过滤pMem只留符合条件的对象 .map(pDetItem => ({ ...pDetItem, pMem: pDetItem.pMem.filter(mem => mem.mIP === targetMIP) })) }; console.log(filteredJson);
代码说明
- 保留顶级字段:用展开运算符
...json直接复制原对象的所有顶级属性(比如address),不用手动逐个复制,扩展性更强。 - 筛选pDet数组:通过
filter结合some方法,只保留那些pMem数组中存在mIP="1234"的pDet元素。 - 过滤pMem数组:对每个筛选后的
pDet元素,用map创建新对象,同时对其pMem数组做二次过滤,只留下符合条件的成员对象。
运行这段代码后,得到的filteredJson结构完全符合你的期望输出。
内容的提问来源于stack exchange,提问作者Lindo Sebastian
相关产品推荐
相关产品推荐

