2017-03-08 62 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); 
}