2016-04-25 84 views
0

我在javascript声明2D阵列如下:在JavaScript 2D阵列更新一个对象更新的每一个对象

cell = {visited:false, left:true, top:true, right:true, bottom:true} 

cells = new Array(10); 

for (i = 0; i < 10; i++) //Initiate 2d cells array. 
{ 
    cells[i] = new Array(cell,cell,cell,cell,cell,cell,cell,cell,cell,cell); 
} 

在代码后来我阵列中更新一个对象:

cells[0][0].visited = true; 

但是,在执行此操作后,数组中每个对象的每个访问属性都标记为true。

+0

见你只有一个单细胞,在数组中多次引用。您需要克隆它们,或者在循环中创建每个单元格。 –

+1

您的代码将10次完全相同的对象放入数组中。该数组将包含10个对同一个单一对象的引用。 – Pointy

+0

如何创建单独的单元格对象的数组? – Goblaz

回答

-1

对不起,我需要开始与不同的对象不一样的“细胞”的阵列:

for (i = 0; i < 10; i++) //Initiate 2d cells array. 
{ 
cells[i] = new Array({visited:false, left:true, top:true, right:true,      bottom:true}, 
    {visited:false, left:true, top:true, right:true, bottom:true}, 
    {visited:false, left:true, top:true, right:true, bottom:true}, 
    {visited:false, left:true, top:true, right:true, bottom:true}, 
    {visited:false, left:true, top:true, right:true, bottom:true}, 
    {visited:false, left:true, top:true, right:true, bottom:true}, 
    {visited:false, left:true, top:true, right:true, bottom:true}, 
    {visited:false, left:true, top:true, right:true, bottom:true}, 
    {visited:false, left:true, top:true, right:true, bottom:true}, 
    {visited:false, left:true, top:true, right:true, bottom:true}); 
} 
+0

(为什么这是低调?) –

0

正如@Pointy说,你的代码有这个引用问题。你可以用Object.create()建立一个对象的“克隆”解决此问题:

cell = {visited:false, left:true, top:true, right:true, bottom:true} 
 

 
cells = new Array(10); 
 

 
for (i = 0; i < 10; i++) //Initiate 2d cells array. 
 
{ 
 
    cells[i] = new Array(
 
     Object.create(cell), 
 
     Object.create(cell), 
 
     Object.create(cell), 
 
     Object.create(cell), 
 
     Object.create(cell), 
 
     Object.create(cell), 
 
     Object.create(cell), 
 
     Object.create(cell), 
 
     Object.create(cell), 
 
     Object.create(cell) 
 
    ); 
 
} 
 

 
cells[0][0].visited = true;

Clone Object without reference javascript [duplicate]