如何过滤嵌套在对象数组内的另一层对象数组 按指定label筛选匹配项
错误原因
- 外层
Array.filter()的回调要求返回布尔值来判断是否保留当前元素 - 你内层嵌套的
Array.filter()始终返回数组类型:即使没有匹配项返回空数组,JS中空数组属于真值,会被外层filter判定为符合条件,因此所有合作伙伴都会被保留。
正确实现
将内层的filter替换为Array.some()即可,some方法会检测数组中是否存在至少一个满足条件的元素,直接返回布尔值,正好匹配外层filter的判断逻辑:
partnerFilter() { const targetLabel = 'Label 2' const partnersClean = this.partners.filter(function(e) { // 只要solution里有一个符合的label就保留当前partner return e.solution.some(function(item) { return item.label === targetLabel }) }) return partnersClean }
如果使用ES6箭头函数可以写得更简洁:
partnerFilter() { const targetLabel = 'Label 2' return this.partners.filter(e => e.solution.some(item => item.label === targetLabel)) }
拓展说明
- 如果需求改为筛选出
solution数组所有label都匹配指定值的合作伙伴,可以把some替换为Array.every() - 如果需要匹配多个目标标签,调整内层判断逻辑即可。
内容的提问来源于stack exchange,提问作者ale.nakai
相关产品推荐
相关产品推荐

