【问题标题】:TypeError: Cannot read property '0' of undefined Google Spreadsheets APITypeError:无法读取未定义的 Google 电子表格 API 的属性“0”
【发布时间】:2021-08-02 17:03:14
【问题描述】:

我正在尝试将玩家列表从 Wargaming API 获取到 Google 电子表格。这是代码:

function playersList() {
    const sheet = SpreadsheetApp.getActiveSheet();

    const initUrl = UrlFetchApp.fetch(
        'https://api.worldoftanks.eu/wot/globalmap/eventrating/?application_id=e631b3284e60a8d5b589545bbaa6b3af&front_id=thunderstorm_bg&event_id=thunderstorm&limit=100&page_no=1',
    );
    const initJson = initUrl.getContentText();
    var initData = JSON.parse(initJson);
    const numOfSites = initData['meta']['page_total'];

    const urls = [];

    for (var i = 1; i < numOfSites; i++) {
        let url = `https://api.worldoftanks.eu/wot/globalmap/eventrating/?application_id=e631b3284e60a8d5b589545bbaa6b3af&front_id=thunderstorm_bg&event_id=thunderstorm&limit=100&page_no=${i}`;
        urls.push(url);
    }

    var data = [];

    for (var x = 0; x < numOfSites - 1; x++) {
        var loopUrl = UrlFetchApp.fetch(urls[x]);
        var loopJson = loopUrl.getContentText();
        var DATA = JSON.parse(loopJson);
        data.push(DATA);
    }

    for (var z = 0; z < numOfSites - 1; z++) {
        for (var y = 0; y < 99; y++) {
            sheet
                .getRange(sheet.getLastRow() + 1, 1)
                .setValue([`data${i}`['data'][y]['rank']]);
        }
    }
}

显然问题是.setValue([data${i}['data'][y]['rank']]); 返回的错误是:TypeError: Cannot read property '0' of undefined

【问题讨论】:

    标签: javascript google-sheets google-api


    【解决方案1】:

    让我们打破你的.setValue

    [`data${i}`['data'][y]['rank']]
    // with some formatting and brackets addded:
    [ (`data${i}`)['data'][y]['rank'] ]
    // split in statements
    const str = `data${i}`;
    [ str['data'][y]['rank']
    

    您的data${i} 是一个字符串,而字符串没有.data 字段,因此导致undefined。然后你在第一个循环中执行[y],其中y0,这就是你得到这个错误的原因。

    我假设你打算做 data[i] 而不是

    `data${i}`
    

    【讨论】:

    • 是的,感谢您的帮助。我在这里有data${i} 的唯一原因是因为我将这些对象分别放在不同的变量中,而不是全部放在一个数组中。我将其更改为data[i],但我现在遇到了另一个错误:TypeError: Cannot read property 'data' of undefined
    • 看来我读错了你的代码,i 应该是 z,所以 data[i] 不起作用(它 应该 错误 i 不起作用'不存在,但也许它在你的代码中存在)_,我的错。至少现在您正确使用了obj[key],您只需检查obj 是否符合您的预期,并且key 确实是obj 的一部分。
    • 非常感谢,代码已经运行了 4 分钟,但我猜这是由于 Wargaming API 的限制。老实说,我不知道为什么我自己没有注意到 z 换成 i 的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多