当我尝试重置数组时,我遇到了一些非常奇怪的行为;例如:
data.length=0;
其中data是数组。我会尝试在这里仅包含相关的代码,但基本上我正在做的是在我的程序的每次迭代中我用更新的值填充数组,然后在另一个函数中使用该数组。但是当我重置数组时,函数似乎在第一次迭代时获得值,但之后没有。
但是,当我不重置数组时,函数会获取值,但也会获取较旧的值。我不想要这个,因为我只想要新的更新值。这是一段代码:
var buffer = [['1',[0]],['2',[0]],['3',[0]],['4',[0]]];
var dataset = [];
ws.onmessage = function(evt){
dataset.length=0;
var distances = JSON.parse(evt.data);
console.log(distances);
for(var i=0; i<buffer.length; i++) {
if(buffer[i][0] == distances.miles) {
buffer[i][1][0]++;
}
//console.log(buffer);
dataset.push(buffer[i][1][0]);
draw();
//console.log(dataset);
}
}
该函数使用数据集数组重绘图表。
我试图在这里保持简单,但完整的功能是here。
我真的不知道造成这种意外行为的原因。
编辑:
console.log(数据集)显示新的更新值,但不知何故,dataset.length = 0;防止draw()函数使用更新的数组。由于没有重置数组,draw()函数可以使用该数组。
编辑:
我试图不重置数组,而是获取最后4个元素并将它们放入一个新数组然后将它们发送到draw(),但仍然是相同的奇怪行为:
x = dataset.slice(-4);
console.log(x);
draw();
但是如果我不这样做或者不清除数组,那么draw()会渲染一个“错误”的图表。我看不出有什么问题。
问题似乎与数组的重置有关,因此这意味着draw()函数似乎在第一次迭代时只被调用一次。
请,请帮忙
答案 0 :(得分:1)
查看您的代码,我不确定,但为什么您甚至有dataset
?你从来没有读过任何东西,而且你说每次通过阵列都要清除它。
你的意思是这样做:
for(var i=0; i<buffer.length; i++) {
if(buffer[i][0] == distances.miles) {
buffer[i][1][0]++;
}
dataset.push(buffer[i][1][0]);
}
draw(dataset); // draw outside the loop, using dataset.
答案 1 :(得分:1)
您根本不需要设置length
。要清除所有值的列表,只需将其设置为空列表:
dataset = [];