2017-01-13 28 views
3

我想推二維空陣列中的一些元素,我發現推方法有問題。推新方法與新陣列

var a = [[],[],[]]; 
a[1].push(1); 
console.log(a); 
//result: [ [], [ 1 ], [] ] 

上面的代碼會得到正確的結果,但是如果我使用新的Array方法,push方法總是推送到所有的索引。我有做錯了嗎?

var a = new Array(3).fill([]); 
// a = [[], [], []] 
a[1].push(1); 
console.log(a); 
//result: [ [ 1 ], [ 1 ], [ 1 ] ], 
//but I think it should be [ [], [ 1 ], [] ] if I only push 1 to a[1] 
+0

你在等什麼結果? – cesare

回答

4

第一個片段創建3個不同的子陣列並將它們存儲在aa[0],a[1],a[2]。當您修改a[1]時,a[0]a[2]不受影響。

第二個片段創建1個子數組並將其存儲在a 3次,a[1],a[2]。當您修改a[1]時,a[0]a[2]也被修改,因爲它們都保持相同的陣列。

+0

我明白了,非常感謝。 –

0

像這樣使用,fill()將您的值放入數組中的每個索引中。要按需要使用它,您應該嘗試fill(value, start, end),其中start是您想要用值填充的第一個索引,end是最後一個。

0

這是正確的。根據docs:fill()方法使用靜態值填充所有元素。

+0

但這裏的問題是一旦填充被使用,他應該被允許改變個別元素 –