我正在从this API中获取JSON数据。我的代码如下:
function setup() {
noLoop();
//Enable cross-origin request
let CO = 'https://cors-anywhere.herokuapp.com/';
//API link
let source = 'http://hitchwiki.org/maps/api/?continent=AF';
let url = CO + source;
loadJSON(url, insertInToArray);
}
function insertInToArray(data) {
var ids = [];
var count = Object.keys(data).length;
for(let i = 0; i < count; i++) {
let cod = data[i].id;
ids[i].push(cod);
}
console.log(ids);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/p5.js"></script>
打开控制台时,出现错误“未捕获(承诺)TypeError:无法读取未定义的属性“ push””。显然,在所有ID之前都存在一个未定义的值,但我真的不知道如何解决它。
感谢您的帮助!
答案 0 :(得分:1)
执行ids[i] = cod
而不是ids[i].push(cod)
。
function setup() {
noLoop();
//Enable cross-origin request
let CO = 'https://cors-anywhere.herokuapp.com/';
//API link
let source = 'http://hitchwiki.org/maps/api/?continent=AF';
let url = CO + source;
loadJSON(url, insertInToArray);
}
function insertInToArray(data) {
var ids = [];
var count = Object.keys(data).length;
for (let i = 0; i < count; i++) {
let cod = data[i].id;
ids[i] = cod;
}
console.log(ids);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.7.3/p5.js"></script>
答案 1 :(得分:1)
数据是一个数组,因此您可以使用map:
function insertInToArray(data) {
var ids = data.map(
function(item){ return item.id; }
)
console.log(ids);
}
答案 2 :(得分:0)
我总是使用async
和await
来处理我的JSON请求。
async function insertInToArray(data) {
...
var count = await Object.keys(data).length;
...