繁体   English   中英

遍历对象数组-TypeError:无法读取未定义的属性“名称”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM