Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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 如何迭代一个对象数组以匹配另一个数组中的公共元素,并返回“0”的键值;名称“;_Javascript_Arrays_Reactjs_Object - Fatal编程技术网

Javascript 如何迭代一个对象数组以匹配另一个数组中的公共元素,并返回“0”的键值;名称“;

Javascript 如何迭代一个对象数组以匹配另一个数组中的公共元素,并返回“0”的键值;名称“;,javascript,arrays,reactjs,object,Javascript,Arrays,Reactjs,Object,我想映射一组对象。如果每个对象的id与另一个数组中的id匹配,那么我想返回电影名称 我已经看到了其他关于这个的线程,并且使用了.map和.find但是由于某些原因,我的代码没有返回我想要的结果 此时,我将以下内容作为匹配ID的数组中的两个对象 { id: 14, name: 'Animation' } { id: 28, name: 'Action' } undefined 现在我想返回每个对象的名称 以下是我的代码尝试: const result = test.map((el) =>

我想映射一组对象。如果每个对象的
id
与另一个数组中的
id
匹配,那么我想返回电影名称

我已经看到了其他关于这个的线程,并且使用了
.map
.find
但是由于某些原因,我的代码没有返回我想要的结果

此时,我将以下内容作为匹配ID的数组中的两个对象

{ id: 14, name: 'Animation' }
{ id: 28, name: 'Action' }
undefined
现在我想返回每个对象的
名称

以下是我的代码尝试:

const result = test.map((el) => {
  return el.name
})

console.log(result)

现在我得到:

TypeError: Cannot read property 'name' of undefined

有人能帮我理解为什么吗?

错误很明显。您正在尝试访问未定义对象的属性。id为14的对象与数组中的数字13不匹配。

您可以先
筛选出未找到匹配对象的元素

const moviesNamesAndGenres=[
{id:28,名称:“Action”},
{id:12,名字:“冒险”},
{id:14,名称:“动画”}
]
const genreIds=[14,28,13];
const test=genreIds.map((genreId)=>{
const matchedGenres=moviesNamesAndGenres.find((movieObj)=>{
return movieObj.id==genreId
})
return matchedGenres//返回匹配的对象,cool
})
常量结果=test.filter(布尔).map((el)=>{
返回el.name
})

console.log(result)
您可以在数组
genreIds
上使用函数
Array.prototype.map
,提取名称,最后过滤掉未定义的值(那些未找到的对象)

const moviesNamesAndGenres=[{id:28,名称:“动作”},{id:12,名称:“冒险”},{id:14,名称:“动画”}],
genreIds=[14,28,13],
result=genreIds.map(g=>(moviesNamesAndGenres.find(m=>m.id==g)|{}.name).filter(布尔);

控制台日志(结果)
13
不在
MoviesNamesandGenes
中,因此当您打印时,
测试
变量值之一将是
未定义的
。因此,在
test.map
中,访问
undefined
name
属性将抛出错误。您不应该使用map,而应该使用其他类似
reduce
,或者您可以在运行上一个
map
之前过滤
未定义的值。我不清楚这就是为什么我问“倒置的笑脸”:这就是为什么我试图帮助您…我只是想说控制台显示错误非常清楚OK谢谢,抱歉打断一下,我当时很沮丧,谢谢你@Belgicathanks提供的代码帮助。
test.filter(Boolean)
过滤掉数组中我猜不是真的元素吗?我从来不知道。谢谢是的,就是这样。你好,很抱歉。让我再试一次,我添加了它,但它不起作用。这可能是我正在做的事情。它看起来像我想要的,虽然我把一切都记录下来了。我很快就会接受的。非常感谢。
TypeError: Cannot read property 'name' of undefined