2016-04-25 79 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]