我最近刚开始一个利用Spotify API的项目。我一直在尝试用我编写的代码提取艺术家的ID:
app.events = function() {
$('form').on('submit', function(e) {
e.preventDefault();
let artists = $('input[type=search]').val();
artists = artists.split(',');
let search = artists.map(artistName => app.searchArtist(artistName));
$.when(...search)
.then((...results) => {
results = results.map(res => res[0].artists.items[0].id);
console.log(results);
});
});
app.searchArtist = (artistName) => $.ajax({
url: 'https://api.spotify.com/v1/search',
headers: {
'Authorization': 'Bearer ' + accessToken
},
method: 'GET',
dataType: 'json',
data: {
type: 'artist',
q: artistName
}
问题出在这一行:
results = results.map(res => res[0].artists.items[0].id);
每次尝试运行代码时,它返回的res[0]
是未定义的,如在浏览器控制台中所示:
res[0] undefined
我要获取的数组是艺术家ID,如下所示: artist id
我不知道为什么它不断出现未定义的错误。我是Java语言和API的新手。此错误的原因是什么?请帮助。
答案 0 :(得分:0)
当 res 中没有 0 键时,问题似乎是试图访问res [0]。
您应该尝试这种方法:
results = results.map(res => res.artists.items[0].id);
Array.prototype.map()的工作方式是为数组中的每个元素调用指定的函数,然后返回新数组而不修改原始数组。