簡體   English   中英

為什么數組將空數組推入另一個?

[英]Why does the array push an empty array into another?

為什么array2 [[], [], [], [], []]的值在循環結束時?

 var array1 = []; var array2 = []; for (let i = 1; i <= 10; i++) { array1.push(i); if (i % 2 === 0) { //console.log(array1); array2.push(array1); array1.length = 0; }; }; console.log(array1); console.log(array2); 

任何人都可以解釋一下,這段代碼中發生了什么?

JavaScript中的數組是可變結構。 通過將0分配給length ,每次都會清空array1 在1和10之間只有5個偶數(即: array2 ),因此array2有5個對array1引用。

這是因為array1.length = 0;

您指向相同的數組引用並將其設置為空。

所以從技術上講,你在迭代中為每個偶數推送一個新的空數組。

其他答案已經解釋了發生了什么,這里是做什么來達到你的期望:

 var array1 = []; var array2 = []; for (let i = 1; i <= 10; i++) { array1.push(i); if (i % 2 === 0) { //console.log(array1); array2.push([...array1]); array1.length = 0; }; }; console.log(array1); console.log(array2); 

您可以簡單地使用名為array destructuring [...arr]的新ECMAScript功能(解構為新數組),該功能會創建應用它的數組的淺表副本。

因為當您按下數組/對象變量時,您將存儲引用,而不是值。 使array1的長度等於0,因為您知道要刪除array1值,這會導致您在array2中看到的結果。

如果你想擁有你期望的行為,你可以在每次推送之前創建一個新數組,如:

var array1 = [];
var array2 = [];

for (let i = 1; i <= 10; i++) {
  array1.push(i);
  if (i % 2 === 0) {
    array2.push(Array.from(array1));
    array1.length = 0;
  };
};
// []
console.log(array1);
// [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ], [ 7, 8 ], [ 9, 10 ] ]
console.log(array2);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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