TypeError: Cannot read property '0' of undefined Google Spreadsheets API
TypeError: Cannot read property '0' of undefined Google Spreadsheets API
我正在尝试从 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 属性 '0' of undefined
让我们分解一下您的 .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]
其中 y
是 0
,这就是你得到那个错误的原因。
我假设你打算做 data[i]
而不是
`data${i}`
我正在尝试从 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 属性 '0' of undefined
让我们分解一下您的 .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]
其中 y
是 0
,这就是你得到那个错误的原因。
我假设你打算做 data[i]
而不是
`data${i}`