首页 > 解决方案 > 访问对象内的数组时出现错误无法读取未定义的属性“1”

问题描述

我正在用这种格式写我的对象 var eqres = [{"datapoints": [[1, 1530034200], [1, 1530034200]]}]

我附上了控制台日志的图像

我正在尝试通过访问它来更新 1530034200 和 1530034200 的值

eqres[0].datapoints[1][1] , eqres[0].datapoints[0][1] 

我收到错误无法读取未定义的属性“1”

我正在从 api 获取数据并将其写入 eqres

var eqres ={};
var eqres = [{'datapoints': [] }];
var ee = this.doRequest({
  url: urll,
  headers: 
    {
      'X-xxx': this.uname,
      'Accept': 'application/json',
      'X-xxx': timestamp,
      'X-xxx': hash_string
    },
  method: 'GET'}).then(response => response.data.data.row)
  .then(function(j)
  {
     var ff = j;
     for (var i in ff)
       {
         eqres[0]['datapoints'].push([ff[i].col[1],ff[i].col[0]]);
       };

  })

我正在尝试像这样更新它

var now = Date.now();
for (var i = eqres.length -1; i >= 0; i--) 
{
  var series = eqres[i];
  var decreaser = 0;
  for (var y = series.datapoints.length -1; y >= 0; y--) 
  {
    series.datapoints[y][1] = Math.round((now - decreaser) /1000) * 1000;
    decreaser += 50000;
  }
}

标签: javascriptarraysjson

解决方案


如果您将eqres数据点直接硬编码到变量中,则您的代码可以正常工作。我在想的是您正在尝试在异步 API 请求完成之前访问数据点。then在您的 API 完成后,尝试在另一个调用中运行您的修改代码,如下所示:

var eqres ={};
var eqres = [{'datapoints': [] }];
var ee = this.doRequest({
  url: urll,
  headers: 
  {
    'X-xxx': this.uname,
    'Accept': 'application/json',
    'X-xxx': timestamp,
    'X-xxx': hash_string
  },
  method: 'GET'}).then(response => response.data.data.row)
.then(function(j) {
  var ff = j;
  for (var i in ff)
  {
    eqres[0]['datapoints'].push([ff[i].col[1],ff[i].col[0]]);
  };
})
.then(function() {
  var now = Date.now();
  for (var i = eqres.length -1; i >= 0; i--) 
  {
    var series = eqres[i];
    var decreaser = 0;
    for (var y = series.datapoints.length -1; y >= 0; y--) 
    {
      series.datapoints[y][1] = Math.round((now - decreaser) /1000) * 1000;
      decreaser += 50000;
    }
  }
});

现在,当您尝试修改它们时,您的数据点将可供您使用。


推荐阅读