我正在使用CanvasJs绘制实时ECG Wave,如果我使用数组的大小,一切都很好,但是当我尝试设置该大小例如478点时,这并没有显示即将到来的新数据,图表是静态的,但我发送新数据。
该图表的代码是下一个:
maxDataLength = 478;
dataLenght = 0;
if (result.length !== maxDataLength) {
for (var i = dataLength; i < result.length; i++)
{
data.push({
x: parseInt(result[i].valorx),
y: parseFloat(result[i].valory)
});
if (data.length > maxDataLength) {
data.shift()}
}
dataLength = result.length;
chart.render();
}
});
问题是图表没有加载新数据。
下一个代码对我有用:
dataLength = 0;
if (dataLength !== result.length) {
for (var i = dataLength; i < result.length; i++)
{
data.push({
x: parseInt(result[i].valorx),
y: parseFloat(result[i].valory)
});
if (data.length > result.length) {
data.shift()}
}
dataLength = result.length;
chart.render();
}
});
但是这张图显示了阵列的所有数据并且看起来很糟糕,如果你知道如何解决这个问题,请告诉我。
答案 0 :(得分:1)
检查此maxDataLength
的唯一位置是在您执行循环之前:
if (result.length !== maxDataLength) {
当它到达maxDataLength
时,这将如何停止循环?以下是您的工作代码,修正了拼写错误,并在for
循环中进行了一次额外检查,以便将计数器与maxDataLength
进行比较:
maxDataLength = 478;
dataLength = 0;
if (dataLength !== result.length) {
for (var i = dataLength; i < result.length && i <= maxDataLength; i++) {
data.push({
x: parseInt(result[i].valorx),
y: parseFloat(result[i].valory)
});
if (data.length > result.length) {
data.shift();
}
dataLength = result.length;
chart.render();
}
}
(这段代码充满了拼写错误,我认为它不会起作用。)