![](/img/trans.png)
[英]Uncaught TypeError: Cannot read properties of undefined while looping through an array
[英]Looping through array of objects - TypeError: Cannot read property 'name' of undefined
我试图创建从艺术家姓名的字符串artists
如下图所示(即“泰勒·斯威夫特,蕾哈娜,贾斯汀”)阵列,但artist_obj
是不确定的,我得到的错误“类型错误:无法读取属性‘名’的未定义”。 我该如何解决?
码
//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++;
});
在您的代码中,您正在使用index作为item["artists_count"]
访问当前对象。 因为"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*$/, "");
但我认为您的问题是艺术家= 艺术家 +“,” + artist_obj [“名称”];
在第一个定义中,粗体艺术家应该未定义。 您想让歌手在那时成为什么样? 抱歉,由于我不是Stack Overflow的新手,因此无法添加评论,您必须代表50分。
您可以尝试以下方法:
let list = [];
let artist_count = 0;
artists.map(artist => {
list.push(artist.name)
artist_count ++;
});
list.join(',');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.