Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript重置数组_Javascript_Jquery_Arrays - Fatal编程技术网

Javascript重置数组

Javascript重置数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,当我试图重置数组时,我有一些非常奇怪的行为;例如: data.length=0; 其中数据是一个数组。我将尝试在这里只包含相关代码,但基本上是我想要的;我做的是在我的程序的每次迭代中,我用更新的值填充数组,然后在另一个函数中使用该数组。但是,当我重置数组时,函数似乎在第一次迭代时获得值,但之后没有 但是,当我不重置数组时,函数会得到值,但也会得到旧值。我不想要这个,因为我只想要新的更新值。这是一段代码片段: var buffer = [['1',[0]],['2',[0]],['3

当我试图重置数组时,我有一些非常奇怪的行为;例如:

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

            }

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

问题似乎在于数组的重置,正因为如此,它意味着draw()函数在第一次迭代中似乎只被调用一次


请,请帮助查看您的代码,我不确定,但为什么您甚至有
数据集
?你从来没有读过它的任何内容,你说你想每次通过数组清除它

你的意思是要做像这样的事情:

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.

for(var i=0;i您根本不需要设置
length
。要清除所有值的列表,只需将其设置为空列表:

dataset = [];

Thansk如果这样做,则不会绘制任何内容。
length
属性不是只读的。将长度设置为零是清空数组的有效方法。@hvgotcodes
array.length=0;
将重置数组而不中断引用。执行此操作时,
array=[];
,您指向
数组的任何引用都将不再有效。感谢您的回复,但即使我已在循环外绘制()并按dataset=[]重置,仍然没有绘制任何内容。dataset数组在实际绘制()中用作数组函数。@hvgotcodes如果我不重置数组,那么当数组变大时,它将绘制所有元素。我只需要它接收到的更新值。这将中断外部引用。这可能不重要,但需要记住。
dataset=[];
dataset.length=0;
与第一个几乎相同,可能会创建一个新数组,从而在内存中分配另一个空间,而第二个只是重置现有数组。要重置数组,由于xophmeisters语句,设置长度很好甚至更好。
dataset = [];