1

当我尝试重置数组时,我遇到了一些非常奇怪的行为;例如:

data.length=0;

其中数据是一个数组。我将尝试仅在此处包含相关代码,但基本上我正在做的是在我的程序的每次迭代中,我用更新的值填充数组,然后在另一个函数中使用该数组。但是当我重置数组时,该函数似乎在第一次迭代时获得了值,但之后没有。

但是,当我不重置数组时,函数会获取值,但也会获取旧值。我不想要这个,因为我只想要新的更新值。这是一个代码片段:

      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); 

            }

    }

该函数使用数据集数组重绘图表。

我试图在这里保持简单,但完整的功能在这里

我真的不知道是什么导致了这种意外行为。

编辑:

console.log(dataset) 显示新的更新值,但不知何故 dataset.length=0; 正在阻止 draw() 函数使用更新的数组。由于无需重置数组,draw() 函数就可以使用数组。

编辑:

我试图不重置数组,而是获取最后 4 个元素并将它们放入一个新数组中,然后将它们发送到 draw(),但仍然是相同的奇怪行为:

            x = dataset.slice(-4);
            console.log(x);
            draw();

但是,如果我不这样做或不清除数组,那么 draw() 会呈现一个“错误”的图表。我看不出有什么问题。

不知何故,问题似乎在于数组的重置,因此这意味着 draw() 函数似乎在第一次迭代时只被调用一次。

请,请帮助

4

2 回答 2

2

你根本不需要设置length。要清除所有值的列表,只需将其设置为空列表:

dataset = [];
于 2012-12-10T12:50:44.730 回答
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.
于 2012-12-10T12:46:56.610 回答