Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 筛选与第二个数组中的值匹配的对象数组_Javascript_Arrays_Reactjs_Object_Filter - Fatal编程技术网

Javascript 筛选与第二个数组中的值匹配的对象数组

Javascript 筛选与第二个数组中的值匹配的对象数组,javascript,arrays,reactjs,object,filter,Javascript,Arrays,Reactjs,Object,Filter,在我的react应用程序中,我有如下用户: { username: 'admin', genres: [{name: 'Music', id: 1}, {name: 'Art', id: 2}] } { title: 'cool video', genres: [{name: 'Music', id: 1}, {name: 'Technology', id: 3}] } 还有像这样的视频: { username: 'admin', genres: [{name: 'Music', id: 1

在我的react应用程序中,我有如下用户:

{ username: 'admin', genres: [{name: 'Music', id: 1}, {name: 'Art', id: 2}] }
{ title: 'cool video', genres: [{name: 'Music', id: 1}, {name: 'Technology', id: 3}] }
还有像这样的视频:

{ username: 'admin', genres: [{name: 'Music', id: 1}, {name: 'Art', id: 2}] }
{ title: 'cool video', genres: [{name: 'Music', id: 1}, {name: 'Technology', id: 3}] }
我正在尝试编写一个函数,该函数将返回一个视频对象数组,其中包含单个用户中的任何类型。到目前为止,我已经能够硬编码一个解决方案,但如果用户有错误的流派数量,它就会中断,所以我正在寻找一个更整洁的解决方案。这就是我到目前为止所做的:

function filterVideos() {

const userGenres = []

user.genres.forEach(genre => {
  userGenres.push(genre.name)
})

const filteredVideos = videos.filter(video => {

  return video.genres.find(o => o.name === userGenres[0])
   || video.genres.find(o => o.name === userGenres[1])
   || video.genres.find(o => o.name === userGenres[2])
})
return filteredVideos}
您可以在
过滤器中使用
some()

const filteredVideos = videos.filter(video => user.genres.some(gen => gen.name === video.name))
const user={username:'admin',流派:[{name:'Music',id:1},{name:'Art',id:2}]}
const video={title:'cool video',类型:[{name:'Music',id:1},{name:'Technology',id:3}]};
const res=video.genres.filter(v=>user.genres.some(g=>g.name==v.name));

console.log(res)
如果我理解您的问题,您希望返回一个完整视频对象的过滤数组,这些对象至少有一种类型与传递的用户相同

您可以使用单个
map()
调用将用户的流派数组简化为流派名称数组

const userGenres = user.genres.map(({name}) => name);
然后,使用确定是否有任何视频类型包含在
userGenres
数组中

const user={
用户名:“admin”,
类型:[{name:'Music',id:1},{name:'Art',id:2}]}
常量视频=[
{
标题:“视频1”,
类型:[{name:'Music',id:1},{name:'Technology',id:3}]
},
{
标题:“视频2”,
类型:[{name:'Art',id:1},{name:'Technology',id:3}]
},
{
标题:“视频3”,
类型:[{name:'Sports',id:1},{name:'Technology',id:3},{name:'skilling',id:3}]
}
]
功能过滤器(用户、视频){
const userGenres=user.genres.map(({name})=>name);
返回视频。过滤器(视频=>(
video.genres.some({name})=>userGenres.includes(name))
));
}

日志(filterVideos(用户、视频))
您可以使用
id
而不是
name
。我想可能会更好idea@AlexeyZelenin你的观点是正确的,但操作要求是比较
名称
你确定
用户
部分吗?因为我认为他有一系列
用户
而不是一个
用户
对象?@AlanOmar我也在想,但他还没有提到任何东西。我刚把他的电脑改造成更简单的。让我们看看OP的反应如何谢谢大家的反应!我认为id或名称是可行的,但我希望返回整个视频对象,就像在Pilchard的解决方案中一样!(我可能没有很好地解释我自己!)不过我真的很感谢你的帮助!:)这回答了你的问题吗?传奇非常感谢你!它工作得很好!