1. 程式人生 > >JavaScript 建立存放物件的陣列注意的問題

JavaScript 建立存放物件的陣列注意的問題

先來看下面的JavaScript 程式碼,看看會得到什麼結果:

var a = new Array();
var b = new Array();
for(i = 0; i < 10; i++) {
  a.push(i);
  b.push(a);
}
console.log(b);
執行上述程式碼後,控制檯輸出的是一個二維陣列,如下:
[
	[0,1,2,3,4,5,6,7,8,9],
	[0,1,2,3,4,5,6,7,8,9],
	[0,1,2,3,4,5,6,7,8,9],
	[0,1,2,3,4,5,6,7,8,9],
	[0,1,2,3,4,5,6,7,8,9],
	[0,1,2,3,4,5,6,7,8,9],
	[0,1,2,3,4,5,6,7,8,9],
	[0,1,2,3,4,5,6,7,8,9],
	[0,1,2,3,4,5,6,7,8,9],
	[0,1,2,3,4,5,6,7,8,9],
]
因為在上述程式碼 b.push(a)中,b陣列中的每一個一維陣列存放的都是a的引用,當陣列a改變,b陣列中的每個一維陣列也跟著改變。整個for迴圈執行完之後,b數組裡面的每一個一陣列物件都是相同的了。正確的解決辦法就是把a陣列物件的宣告放在for迴圈裡面,如下:
var b = new Array();
for(i = 0; i < 10; i++) {
  var a = new Array();
  a.push(i);
  b.push(a);
}
console.log(b);

輸出的結果則是:

[
        [0],
        [1],
        [2],
        [3],
        [4],
        [5],
        [6],
        [7],
        [8],
        [9], 
]