如何根据嵌套tags数组的URL值过滤主数组对象?
解决方法
你需要用**外层数组的filter配合内层tags数组的some**来实现需求,具体代码如下:
const array = [ { name: 'name', tags: [ { name: 'xxxx', url: '/this', }, ], }, { name: 'name', tags: [ { name: 'xxxxxxx', url: '/that', }, ], }, ]; // 筛选出tags中包含url为'/this'的外层对象 const result = array.filter(item => { return item.tags.some(tag => tag.url === '/this'); }); console.log(result); // 输出:[{ name: 'name', tags: [{ name: 'xxxx', url: '/this' }] }]
为什么你的方法没成功?
你之前先使用map再嵌套filter的思路存在逻辑偏差:
map的作用是转换数组每个元素,会返回与原数组长度一致的新数组,无法实现“剔除不符合条件元素”的筛选目的;- 仅对内层
tags执行filter,最终得到的是每个外层对象的tags筛选结果,而非你需要的外层对象本身。
补充:同时保留外层对象与筛选后的tags
如果需要不仅筛选外层对象,还将外层对象的tags过滤为仅包含url: '/this'的元素,可以在filter后搭配map处理:
const resultWithFilteredTags = array .filter(item => item.tags.some(tag => tag.url === '/this')) .map(item => ({ ...item, tags: item.tags.filter(tag => tag.url === '/this') })); console.log(resultWithFilteredTags); // 输出:[{ name: 'name', tags: [{ name: 'xxxx', url: '/this' }] }]
内容的提问来源于stack exchange,提问作者Giacomo Cochetti
相关产品推荐
相关产品推荐

