如何根据指定数组值过滤含嵌套tags数组的对象数组?
按多标签过滤对象数组(需匹配所有指定标签)
需求说明
给定一个包含嵌套标签数组的对象数组,需要过滤出同时包含指定所有标签的对象——只有当对象的tags数组包含activeTags中的每一项时,才保留该对象。
原始数据
const data = [ { "id":"Nerium", "tags":["CMS Selection", "Experience Design", "Development","UX"], "featured":0 }, { "id":"WesternDigital", "tags":["Digital Strategy", "Analytics", "Example"], "featured":1 }, { "id":"Example", "tags":["Example", "Analytics", "UX"], "featured": 0 } ];
过滤条件
const activeTags = ['UX', 'Example'];
解决方案代码
const filteredData = data.filter(item => { return activeTags.every(tag => item.tags.includes(tag)); }); console.log(filteredData);
代码逻辑说明
- 使用
filter()方法遍历原始数组,筛选符合条件的对象 - 借助
every()方法判断:activeTags中的每一个标签,是否都存在当前对象的tags数组里(includes()用于检查单个标签是否存在) - 只有当所有标签都匹配时,
every()返回true,当前对象才会被保留到结果数组中
预期输出
[{ "id": "Example", "tags": ["Example", "Analytics", "UX"], "featured": 0 }]
内容的提问来源于stack exchange,提问作者Mat Mol
相关产品推荐
相关产品推荐

