如何根据对象属性过滤嵌套对象数组?附代码示例
如何根据属性过滤嵌套对象数组?
给定如下嵌套对象数组,需要根据对象的name属性进行过滤,比如筛选出所有name === 'sam'的对象:
const arrNestedObj=[ { "id":"1", 0:{ "name":"john", "age":"10" }, 1:{ "name":"sam", "age":"20" } },{ "id":"2", 0:{ "name":"sam", "age":"15" }, } ]
预期输出:
[ { "name":"sam", "age":"20" }, { "name":"sam", "age":"15" } ]
实现方案
可以通过遍历外层数组、提取目标子对象并过滤的方式实现,代码如下:
const result = arrNestedObj.flatMap(item => { // 提取当前外层对象中包含name的子对象(排除id这类非对象属性) const subObjects = Object.values(item).filter(val => typeof val === 'object' && val.name); // 过滤出name为sam的对象 return subObjects.filter(obj => obj.name === 'sam'); }); console.log(result);
思路说明
- 使用
flatMap遍历外层数组,同时将内层结果自动扁平化合并为一个数组 - 对每个外层对象,用
Object.values(item)获取所有属性值,筛选出包含name的子对象 - 二次过滤子对象,只保留
name === 'sam'的项 - 最终所有符合条件的对象会被收集到同一个数组中
内容的提问来源于stack exchange,提问作者prathm_76
相关产品推荐
相关产品推荐

