循环遍历对象数组 - TypeError:无法读取属性' name'未定义的

时间:2017-04-09 06:46:29

标签: javascript jquery arrays spotify

我正在尝试从下面显示的artists数组创建一个艺术家名字的字符串(即#34; Taylor Swift,Rihanna,Justin Timberlake"),但是{{ 1}}未定义,我收到错误" TypeError:无法读取属性' name'未定义"。我该如何解决这个问题?

enter image description here

代码

artist_obj

3 个答案:

答案 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(',');