![](/img/trans.png)
[英]Pushing an associative array onto each value of another array in Javascript
[英]Javascript Array changes value when I push it onto another array
我的代碼中發生了一件奇怪的事情,我不知道原因。
我有2個數組。 一個是非常大的數組(長40,000個元素),一個是空數組。
我想像這樣將大數組推到空數組上:
emptyArray.push(largeArray);
這在大多數情況下都可以正常工作....但是當我執行推送時,一些大型Array值就消失了。 如果之前是:
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);
希望能有所幫助。
您可以使用它。
var storageArr = imgDataRed.slice();
slice()基本上是在Java腳本中可用的操作,以便進行復制和剪切。
如果使用大型數組,則應該查看像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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.