打印个别对象到DOM时,他们的ID不同
我正在开发一个JavaScript web应用程序,该应用程序从用户(音乐艺术家的姓名)获取input,并输出由Spotify API确定的相关艺术家及其最受欢迎歌曲的列表。 我最初有一个这个function的基本版本,但它只是发布所有相关艺术家的列表,列出所有相关艺术家最受欢迎的歌曲的列表,而且我希望整个对象能够打印出来(艺术家加上大多数stream行歌)。
我有一系列代表通过spotify-web-api-js节点模块接收到的艺术家的对象,Node.js和Browserify使其在浏览器中正常工作,并由Spotify ID唯一标识。 我怎么能循环他们,如果我不知道这些ID之前,用户进行search,以便我可以正确地将他们推到一个对象,然后我可以通过jQuery的append
input到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); }