如何过滤嵌套对象数组,筛选出内层含指定name属性值的外层对象
问题解答
原有实现的问题
你写的这段代码并不合理,存在多个问题:
- 语法错误:回调函数内你使用了未定义的变量
elt,同时if判断、map调用都缺少闭合括号,代码无法正常运行。 - 方法误用:
map的核心作用是对数组元素做映射转换生成新数组,你这里只需要判断是否存在符合条件的元素,用map完全不符合使用场景,还会额外生成无意义的临时数组占用性能。 - 逻辑不严谨:你通过赋值变量的方式判断是否存在符合条件的元素,虽然在当前场景下可能得到正确结果,但可读性差,也没有利用JS数组自带的判断方法的能力。
最优实现方案
判断数组中是否存在至少一个符合条件的元素,直接使用JS内置的Array.some()方法即可,这个方法会在匹配到第一个符合条件的元素时就终止遍历,性能最优,完全适配你的需求。
实现代码如下:
const filteredArray = array.filter(el => el.list.some(item => item.name.includes('abc')) )
这段代码的逻辑非常清晰:外层filter遍历所有外层对象,内层some遍历对应对象的list数组,只要有一个元素的name包含abc,就会返回true,当前外层对象就会被保留到结果数组中。
内容的提问来源于stack exchange,提问作者mfa26
相关产品推荐
相关产品推荐

