使用.push()将数据从JSON添加到数组时的未定义值

时间:2019-02-22 15:23:25

标签: javascript json p5.js

我正在从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之前都存在一个未定义的值,但我真的不知道如何解决它。

感谢您的帮助!

3 个答案:

答案 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)

我总是使用asyncawait来处理我的JSON请求。

async function insertInToArray(data) {
    ...
    var count = await Object.keys(data).length;
    ...