2017-04-09 66 views
1

我試圖從artists數組(如「Taylor Swift,Rihanna,Justin Timberlake」)創建一個藝術家姓名字符串,但artist_obj未定義,並且出現錯誤「TypeError:無法讀取未定義的屬性'名稱'。我該如何解決?在對象數組中循環 - TypeError:無法讀取未定義的屬性'name'

enter image description here

代碼

//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++; 
}); 
+0

你可以把你的代碼的地方,我們可以測試它? –

+1

沒有進入你的代碼,當你做:var artists = item [「artists」],artist =「」;' 它會將你的藝術家數組設置爲null,所以你試圖從它得到的所有東西都會返回未定義。 – Omrisk

回答

2

在您的代碼中,您正在使用索引訪問當前對象,如item["artists_count"]。這不會工作beacuase "artists_count"是一個字符串&不會傳遞變量值!您必須使用不含雙引號的item[artists_count]來傳遞變量!除此之外,你的代碼沒問題!

並請注意,要傳遞到所述forEach的說法,(即)爲基準對當前對象,因此不存在需要保持一個單獨的變量,以保持&手動迭代指數。

你的代碼更改爲:

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*$/, ""); 
0

,但我覺得你的問題是在這條線的藝術家= 藝術家 + 「 」+ artist_obj [「 名稱」];

在第一個定義上,粗體藝術家應該是未定義的。那時你想讓藝術家成爲什麼?我很抱歉,我不能添加評論,因爲我是Stack Overflow的新手,你必須有50分的代表。

+1

這就是爲什麼你可以回答真正的問題,直到你有50個代表 – mplungjan

0

你可以試試這個:

let list = []; 
let artist_count = 0; 

artists.map(artist => { 
    list.push(artist.name) 
    artist_count ++; 
}); 

list.join(','); 
相關問題