我的代码中发生了一件奇怪的事情,我不知道原因。
我有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);
希望有所帮助。
答案 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