如何根据子对象过滤JavaScript对象数组?
根据子对象数组过滤外层对象的正确实现
你的需求是:过滤掉所有包含data值为"hello"的子对象的外层对象,即最终保留的外层对象,其secondaryObjects数组中不存在任何data等于"hello"的子元素。
正确代码实现
const filteredField = data.filter(entry => { // 若子数组中不存在data为"hello"的元素,则保留当前外层对象 return !entry.secondaryObjects.some(item => item.data === "hello"); });
代码说明
Array.some()会遍历整个secondaryObjects数组,只要有一个子对象满足item.data === "hello",就返回true- 用
!取反后,当子数组中没有符合条件的元素时,filter会保留该外层对象,完全匹配你的需求 - 相比你之前只检查第一个子元素的写法,这个方法会覆盖子数组的所有索引位置,不会遗漏任何符合条件的子对象
可选:忽略大小写的情况
如果需要忽略data值的大小写(比如"Hello"、"HELLO"也需要触发过滤),可以修改为:
const filteredField = data.filter(entry => { return !entry.secondaryObjects.some(item => item.data.toLowerCase() === "hello"); });
内容的提问来源于stack exchange,提问作者Jack Duffy
相关产品推荐
相关产品推荐

