试图获得平均值时变得不确定

时间:2019-01-18 13:47:58

标签: javascript amazon-web-services amazon-cloudwatch

我在数组中显示5个数据点,然后在数组中显示5个数据点,最后得到带有这2个数组的globalArray。

所以我想要的是:

  • 如果大多数平均值等于200,则在数组中显示“向上”
  • 如果大多数平均值不等于200,则将“向下”显示在数组中,并采用第一个时间戳,平均值不等于200。

我正在尝试做某事,但出现错误:

  

无法读取未定义的属性“平均”。

预期结果: ['up','down'] [null,2019-01-15T08:26:00.000Z]

// ***** SCRIPT CONTINUE
getAllMetrics(regions).then(res => {
  console.log(res);
  /*
  [[{Timestamp: 2019-01-15T08:26:00.000Z, Average: 200},
  {Timestamp: 2019-01-15T08:32:00.000Z, Average: 200},
  {Timestamp: 2019-01-15T08:26:00.000, Average: 200},
  {Timestamp: 2019-01-15T08:29:00.000Z, Average: 200},
  {Timestamp: 2019-01-15T08:35:00.000Z, Average: 200}],
  [{Timestamp: 2019-01-15T08:26:00.000Z, Average: 400},
  {Timestamp: 2019-01-15T08:32:00.000Z, Average: 400},
  {Timestamp: 2019-01-15T08:26:00.000, Average: 400},
  {Timestamp: 2019-01-15T08:29:00.000Z, Average: 200},
  {Timestamp: 2019-01-15T08:35:00.000Z, Average: 200}]] */
  tabRES = [];
  //Loop regions
  var i = -1;
  TsTAB = [null, null, null];

  var a=-1;
  while( tabReg[++a] ){
    TsTAB.push( null );
  }
  while (res[++i]) {
    Avg = {
      up: 0,
      down: 0
    };
    Ts = "";
    RespARRAY = res[i];
    var j = -1;
    while (RespARRAY[++j]) {
      if (RespARRAY[j].Average == 200) {
        Avg.up++ // IF 200 -> UP
          //and push array TS
      } else {
        Avg.down++ // -> DOWN
          //Retrieve the last 
          Ts = Ts || RespARRAY[j].Timestamp;
      }
    }
    if (Avg.up > Avg.down) {
      tabRES.push('up');
    } else {
      tabRES.push('down');
      TsTAB[i] = TsTAB[i] || Ts;
    }
  }
  console.log(tabRES);
  console.log(TsTAB);
}).catch(err => {
  console.log(err);
});

1 个答案:

答案 0 :(得分:0)

该错误是由while (RespARRAY[++j])引起的。循环需要结束条件。当前,它会遍历您的五个值并寻找第六个值,该值不存在。因此RespARRAY[j]是未定义的,而javascript无法找到该未定义值的“平均”属性。

您可以使用

开始循环
if(j > 4){ break; }

或者更好,

if(j >= RespARRAY.length){ break; }

或者您可以使用for循环。 (请参见www.w3schools.com/js/js_loop_for.asp

请注意,在外(i)循环中也会发现相同的问题。