2017-04-09 3 views
1

artists配列(つまり「Taylor Swift、Rihanna、Justin Timberlake」)からアーティスト名の文字列を作成しようとしていますが、 artist_objは未定義で、 "TypeError:未定義のプロパティ 'name'を読み取ることができません"というエラーが表示されます。これをどうやって解決するのですか?オブジェクトの配列をループする - 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"]として現在のオブジェクトにアクセスしています。これはうまく動作しません"artists_count"は文字列&はvarible値を渡すつもりはありません!変数を渡すには二重引用符を使用する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(','); 
関連する問題