[英]Filter an array of objects by the property inside an object contained in an array inside the object iterated [Javascript]
要过滤的数组内部对象的结构如下:
videos:[
{
name: 'video name'
url: 'video url'
tags: [
{
tag: 'reels',
// other tag info
},
{
tag: 'demos',
// other tag info
},
]
},
...
]
我需要通过标签数组内对象上的属性标签过滤视频数组,例如,我需要获取一个包含所有视频对象的数组,其中标签数组存在一个带有标签属性“卷轴”的对象
我试过的*
videos.filter(video => video.tags.tag === 'reels');
返回一个空数组,因为我没有访问标签内的对象来读取标签属性,所以我尝试了以下操作
videos.filter(video => {
video.tags.forEach(tag => {
if (tag.tag === 'reels') {
return true:
};
});
});
这看起来有点疯狂和不一致,但我认为我可以迭代每个视频中的标签数组,在videos.filter上迭代并返回true,但它不起作用
有几种方法可以完成同样的事情,可以用.some
来做到这一点,它“测试数组中是否至少有一个元素通过了由提供的函数实现的测试。 ”
videos.filter(video => video.tags.some(t => t.tag === "reels"));
您在第二次尝试时非常接近正确。 如果您将其从 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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.