错误在对象内部访问数组时无法读取未定义的属性“ 1”

时间:2018-06-26 22:37:08

标签: javascript arrays json

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

i have attached the image of consolelog

我正尝试通过像

一样访问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;
  }
}

2 个答案:

答案 0 :(得分:0)

在这种情况下,我总是使用以下调试代码:

console.log(eqres[0]);
console.log(eqres[0].datapoints);
console.log(eqres[0].datapoints[1]);
console.log(eqres[0].datapoints[1][1]);

现在告诉我夹线抛出错误并在上面显示一行结果。

答案 1 :(得分:0)

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

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;
    }
  }
});

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