遍历对象数组-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'”

Javascript 中的数组错误:未捕获的 TypeError:无法读取未定义的属性“x”

TypeError:无法读取未定义的属性“SHORT”

TypeError:无法读取reactjs中未定义的属性“长度”