遍历对象数组-TypeError:无法读取未定义的属性“名称”
Posted
技术标签:
【中文标题】遍历对象数组-TypeError:无法读取未定义的属性“名称”【英文标题】:Looping through array of objects - TypeError: Cannot read property 'name' of undefined 【发布时间】:2017-09-04 08:34:33 【问题描述】:我正在尝试从下面显示的artists
数组(即“Taylor Swift、Rihanna、Justin Timberlake”)创建艺术家姓名的字符串,但 artist_obj
未定义,我收到错误“TypeError:无法读取未定义的属性“名称”。我该如何解决这个问题?
代码
//Get info for each song
var artists = item["artists"],
artist = "";
var artists_count = 0;
artists.forEach(function(item)
var artist_obj = item["artists_count"];
if(artists_count !== 0)
artist = artist + ", " + artist_obj["name"];
else
artist += artist_obj["name"];
artists_count++;
);
【问题讨论】:
你能把你的代码放在我们可以测试的地方吗? 无需深入您的代码,当您这样做时:var artists = item["artists"], artist = "";
它会将您的艺术家数组设置为空,因此您尝试从中获取的所有内容都将返回未定义。
【参考方案1】:
在您的代码中,您使用索引作为item["artists_count"]
访问当前对象。这不会起作用,因为"artists_count"
是一个字符串并且不会传递变量值!您必须使用item[artists_count]
whichout 双引号来传递变量!除此之外,您的代码还可以!
请注意,您传递给forEach
的参数(即item)是对当前对象的引用,因此无需保留单独的变量来维护 &手动迭代索引。
将您的代码更改为:
var artists = item["artists"],
artist = "";
var artists_count = 0;
artists.forEach(function(item)
var artist_obj = item;
if(artists_count !== 0)
artist = artist + ", " + artist_obj["name"];
else
artist += artist_obj["name"];
artists_count++;
);
更干净的版本是:
var artists = item["artists"],
artist = "";
artists.forEach(function(item)
artist = artist + item["name"] + ", ";
);
artist = artist.replace(/,\s*$/, "");
【讨论】:
【参考方案2】:但我认为您的问题出在这一行上,artist = artist + ", " + artist_obj["name"];
在第一个定义中,粗体的艺术家应该是未定义的。你希望艺术家在那个时候是什么?抱歉,我无法添加评论,因为我是 Stack Overflow 的新手,您必须获得 50 分的代表。
【讨论】:
这就是为什么你可以真正回答问题,直到你有 50 个代表【参考方案3】:你可以试试这个:
let list = [];
let artist_count = 0;
artists.map(artist =>
list.push(artist.name)
artist_count ++;
);
list.join(',');
【讨论】:
以上是关于遍历对象数组-TypeError:无法读取未定义的属性“名称”的主要内容,如果未能解决你的问题,请参考以下文章
错误:未捕获 [TypeError:无法读取未定义 Jest 反应测试的属性“x”
TypeError:无法读取未定义的属性“MyProperty”
尝试更新firestore中的数组时出现“TypeError:无法读取未定义的属性'arrayUnion'”