要过滤的数组内对象的结构如下:
videos:[
{
name: 'video name'
url: 'video url'
tags: [
{
tag: 'reels',
// other tag info
},
{
tag: 'demos',
// other tag info
},
]
},
...
]
我需要通过标签数组内的对象上的属性标签来过滤视频数组,例如,我需要获得一个包含所有视频对象的数组,标签数组上存在一个具有标签属性“ reels”的对象
我尝试了什么*
videos.filter(video => video.tags.tag === 'reels');
返回一个空数组,因为我没有访问标签内的对象来读取标签属性,所以我尝试了以下操作
videos.filter(video => {
video.tags.forEach(tag => {
if (tag.tag === 'reels') {
return true:
};
});
});
看起来有点疯狂和不一致,但是我认为我可以遍历在video.filter上迭代的每个视频中的标签数组,并返回true,但是它不起作用
答案 0 :(得分:1)
第二次尝试非常正确。如果将其从forEach更改为查找并返回值,它将起作用。
const videos = [
{
name: 'video name',
url: 'video url',
tags: [
{
tag: 'reels',
},
{
tag: 'demos',
},
]
},
{
name: 'video name2',
url: 'video url2',
tags: [
{
tag: 'demos',
},
]
},
];
const filtered = videos.filter(video => {
return video.tags.find(tag => {
if (tag.tag === 'reels') {
return true;
};
});
});
console.log(filtered);
// shortened to one line
const filtered2 = videos.filter(video => video.tags.find(tag => tag.tag === 'reels'));
console.log(filtered2);
答案 1 :(得分:1)
完成同一件事的几种方法,可以通过.some
来完成,{测试数组中的至少一个元素是否通过了提供的功能实现的测试。”
videos.filter(video => video.tags.some(t => t.tag === "reels"));