2017-03-08 22 views
0

所以,我有一個二維數組,這是我decalre這樣的:使用Javascript:在2D陣列改變單元格的值

var grille = new Array(60).fill(new Array(30).fill(false)); 

我希望能夠改變陣列中的一個單元的值,但是當我做

grille[x][y] = "new value"; 

我有所有的x數組,其中包含索引y「新值」,而不是array [x] [y]。

所以我有

grille[1][y] = "new value" 
grille[2][y] = "new value" 
grille[3][y] = "new value" 

代替

grille[x][y] = "new value" 
grille[1][y] = false 

例如。 這可能是一個noob錯誤,但我很新的JavaScript,不知道如何做到這一點。

感謝您的幫助。

+0

不清楚問題是什麼。 – Slime

+0

爲了改變'grille [x] [y]'的值,我想做'grille [x] [y] =「new value」',但是當我這樣做時,不僅'grille [x] [y ]'是改變了,但也'格柵[1] [Y],格柵[2] [Y],...',我不知道爲什麼 –

+0

不是最好的人來解釋這一點,但問題是,所有格柵中的陣列實際上並不是唯一的,它們都共享相同的參考陣列,這會在您按照您的方式創建它們時發生。我認爲你正在尋找陣列的「深層複製」。 – Slime

回答

0

在你的情況「新的Array(30).fill僞(假)」將被創建一次。它不會爲'新陣列(60)'中的每個元素創建。所以所有60個單元格都擁有相同的數組引用。所以,如果你改變它 - 它會更新所有的參考。

var grille = (new Array(60)).fill().map(function(){ return new Array(30).fill(false);}); 

在此,在「新陣列(60)」「新陣列(30)」的每個元素將被創建並且每個單元現在有不同的參考。希望這可以幫助。

0

所以我在做什麼,這是var grille = new Array(60).fill(new Array(30).fill(false));填充格柵與相同的new array(30)並沒有創建一個像我想的每個格柵的索引新陣列。 所以我所做的卻是這個

grille= new Array(60); 
for (var i = 0; i < grille.length; i++) { 
    grille[i] = new Array(30).fill(false); 
}