打印个别对象到DOM时,他们的ID不同

我正在开发一个JavaScript web应用程序,该应用程序从用户(音乐艺术家的姓名)获取input,并输出由Spotify API确定的相关艺术家及其最受欢迎歌曲的列表。 我最初有一个这个function的基本版本,但它只是发布所有相关艺术家的列表,列出所有相关艺术家最受欢迎的歌曲的列表,而且我希望整个对象能够打印出来(艺术家加上大多数stream行歌)。

我有一系列代表通过spotify-web-api-js节点模块接收到的艺术家的对象,Node.js和Browserify使其在浏览器中正常工作,并由Spotify ID唯一标识。 我怎么能循环他们,如果我不知道这些ID之前,用户进行search,以便我可以正确地将他们推到一个对象,然后我可以通过jQuery的appendinput到DOM? 我一直试图以各种方式访问​​它们,但似乎并没有工作:

 s.getArtistRelatedArtists(originalArtistId, function(err, data) { for (i = 0; i < data.artists.length; i++) { console.log(data.artists[i].name); relatedArtistsObject[data.artists[i].id] = { name: data.artists[i].name, songs: [] }; s.getArtistTopTracks(data.artists[i].id, "US", function (err, data2) { if (relatedArtistsObject[data2.tracks[0].artists[0].id] !== undefined) { // console.log(data2.tracks[0].name); -- this outputs the song titles I want relatedArtistsObject[data2.tracks[0].artists[0].id].songs.push(data2.tracks[0].name); } }); } console.log(relatedArtistsObject); // loop through this object and print it through the screen for (k = 0; k < relatedArtistsObject.length; k++) { console.log(relatedArtistsObject.id.songs[0].name); $('#related-artist').append(relatedArtistsObject[k]); } // $('#related-artist').append(relatedArtistsObject); }); 

这里是完整代码的链接(不能正常工作,因为它没有启用Node.js / browserify): https : //jsfiddle.net/pmh04e99/

这个答案是部分有用的,但不适用于此,因为JSON输出在我想要访问的数组中没有“名称”字段。 相反, songs是1的数组,我想要的内容是在0项内。 relatedArtistsObject console.log输出如下所示,例如:

在这里输入图像说明

当我不知道Spotify ID时,如何通过代码访问DOM中的这些对象?

注意:我知道我还没有error handling,但我希望能够首先实现主要function。

你可以使用in或使用Object.keys 。

前者将迭代对象的每个可枚举的属性名称,并将该名称设置为指定的variables。 然后可以使用该名称来访问该对象的属性值。

后者将返回该对象的属性名称的数组。 然后,您可以使用常规for循环遍历该数组,并使用数组中的每个值作为id

对于…在

 for(id in relatedArtistsObject){ var artist = relatedArtistsObject[id]; console.log(artist.name,artist.songs); } 

Object.keys

 var ids = Object.keys(relatedArtistsObject); for(var i=0; i<ids.length; i++){ var artist = relatedArtistsObject[ids[i]]; console.log(artist.name,artist.songs); }