处理 JavaScript api 未定义的响应 属性 '0'

Handle JavaScript api response property '0' of undefined

我是初学者,正在尝试从 API 中获取数据。当我尝试映射响应值时,它的某些特定键的值是未定义的,它会抛出错误 Cannot read 属性 '0' of undefined 我已经尝试了各种方法,但对我没有任何作用。 这是代码

const showEverything=(artist, album,mytracks) => {
let everythingObj={
    name    :[],
    title   :[],
    album   :[],
    id      :[]
}

// push the artist search result to my everythingObj
const recordings=artist.recordings;
recordings.map((record) => {
const { "artist-credit": credit } = record;
//here  it shows the error
const { "release-group": album } = record.releases[0]

everythingObj.name.push(credit[0].name);
everythingObj.title.push(record.title);
everythingObj.album.push(album.title);
everythingObj.id.push(record.releases[0].id);
})

有时 API 并不是我们期望的 return 数组。 您可以输入一个 if (condition) 来先检查它是否存在。

if (recordings.releases) {
    /* your code */
}
else {
    console.log('Blank response from API')
}

参考:MDN - Falsy values

有多种方法,但一种方法是您可以进行检查

if(record && record.releases && record.releases[0])
const { "release-group": album } = record.releases[0]


credit[0] && credit[0].name && everythingObj.name.push(credit[0].name);
record && record.title && everythingObj.title.push(record.title);
album && album.title && everythingObj.album.push(album.title);
record && record.releases[0] && record.releases[0].id && everythingObj.id.push(record.releases[0].id);

您可以根据自己的使用情况对以上条件进行进一步简化。

通过上述检查,如果数据不存在,它不会将数据推送任何值也将解决错误。