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