Получение неопределенности при попытке получить среднее - PullRequest
0 голосов
/ 18 января 2019

Я отображаю 5 точек данных в массиве, затем 5 точек данных в массиве и, наконец, получил globalArray с этим массивом 2.

Итак, что я хочу:

  • , если большинствоСреднее значение равно 200, отобразите «вверх» в массив
  • , если большая часть среднего отличается от 200, отобразите «вниз» в массив и возьмите первую метку времени, где среднее значение отличается от 200.

Я пытаюсь что-то сделать, но я получил ошибку:

не может прочитать свойство 'Среднее' из неопределенного.

Ожидаемый результат: [«вверх», «вниз»] [ноль, 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 голосов
/ 18 января 2019

Ошибка вызвана 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) цикле.

...