【问题标题】:Handle JavaScript api response property '0' of undefined处理未定义的 JavaScript api 响应属性“0”
【发布时间】:2021-08-11 21:10:40
【问题描述】:

我是一名初学者,正在尝试从 API 获取数据。当我尝试映射响应值时,它的某些特定键的值是未定义的,它会引发错误 Cannot read property '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);
})

【问题讨论】:

    标签: javascript json object fetch-api


    【解决方案1】:

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

    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);
    

    您可以根据您的使用情况进一步简化上述条件。

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

    【讨论】:

    • @ali-raza 请尝试以上条件,看看是否对您有帮助!!!
    【解决方案2】:

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

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

    参考:MDN - Falsy values

    【讨论】:

    • 录制数组已退出,但它有一个属性 record.releases[0]。它的值在某些情况下是不确定的
    • @Ali 你可以使用条件来处理这种情况。
    • 我正在使用以下条件,但错误仍然相同。 if(record.releases[0]){ const { "release-group": album } = record.releases[0] everythingObj.album.push(album.title); } else { everythingObj.album.push('undefinded'); }
    • @Ali 试试if(record.releases) {}。您可以另外检查嵌套的if(record.releases.length != 0),因为 JS 不会将空数组视为虚假值(请参阅链接的 MDN 文档),但这完全取决于您的用例。
    • 我做了,错误直接转到const { "release-group": album } = record.releases[0]这一行
    猜你喜欢
    • 2019-07-19
    • 2019-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多