我正在尝试从下面显示的artists
数组创建一个艺术家名字的字符串(即#34; Taylor Swift,Rihanna,Justin Timberlake"),但是{{ 1}}未定义,我收到错误" TypeError:无法读取属性' name'未定义"。我该如何解决这个问题?
代码
artist_obj
答案 0 :(得分:2)
在您的代码中,您使用索引item["artists_count"]
访问当前对象。这不会工作beacuase "artists_count"
是一个字符串&不会传递变量值!你必须使用item[artists_count]
多个双引号来传递变量!除此之外你的代码还可以!
请注意,您传递给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*$/, "");
答案 1 :(得分:0)
但我认为你的问题出在这一行上艺术家= 艺术家 +"," + artist_obj [" name"];
在第一个定义中,粗体艺术家应该是未定义的。你想要艺术家在那一点上做什么?我很抱歉我无法添加评论,因为我是Stack Overflow的新手,你必须得到50分的代表。
答案 2 :(得分:0)
你可以试试这个:
let list = [];
let artist_count = 0;
artists.map(artist => {
list.push(artist.name)
artist_count ++;
});
list.join(',');