当我将其推送到另一个数组时,Javascript数组会更改值

时间:2017-12-10 12:39:16

标签: javascript arrays

我的代码中发生了一件奇怪的事情,我不知道原因。

我有2个数组。一个是非常大的数组(长40,000个元素),一个是空数组。

我想把大数组推到空数组上,如下所示:

emptyArray.push(largeArray);

这大部分工作都是预期的......但是当我进行推送时,一些大的数组值只是消失了。如果之前是:

largeArray = [0,1,2,3,4,5,.....,40000];

现在当我在console.log上时,它会显示:

largeArray = [0,1,3,4,5,....,40000];

2刚刚消失。我通过使用断点在检查之前检查了2是否存在,并且确保在数组被推送之前它的所有值都存在。然而,当推动阵列时,有些只是消失了。

有什么想法吗?我在firefox和chrome上测试了我的项目,两者都表现出相同的行为。这也只是普通的javascript数组,而不是类型化的数组或任何东西。

编辑:

评论中有些人要求提供代码背后的更多细节。所以这是一个更直接的解释。

我在画布上绘制图像,然后获取图像数据。我只想使用红色通道,所以我创建了一个新的数组:

var imgData = ctx.getImageData(0, 0, width, height);

  var imgDataRed = [];
  for (i = 0; i < imgData .length; i+=4) {
          imgDataRed[i] = imgPixels[i / 4];
  }

然后我想将这个imgDataRed数组推送到空的存储阵列上。所以我跑:

var storageArr = [];
storageArr.push(imgDataRed);

希望有所帮助。

2 个答案:

答案 0 :(得分:0)

你可以使用它。

var storageArr = imgDataRed.slice();

基本上,slice()是java脚本中可用于复制和剪切的操作..

答案 1 :(得分:0)

如果您正在使用大型数组,那么您应该关注像immutable.js这样的库。

以下是一个例子:

const { List } = require('immutable');

var arr1 = [];

for(var i=0; i<40000; i++){
    arr1.push(i);
}

var list1 = List(arr1);


console.log(list1.count());   // outputs 40000