我在数组中显示5个数据点,然后在数组中显示5个数据点,最后得到带有这2个数组的globalArray。
所以我想要的是:
我正在尝试做某事,但出现错误:
无法读取未定义的属性“平均”。
预期结果: ['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);
});
答案 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
)循环中也会发现相同的问题。