簡體   English   中英

當我將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM