2016-04-25 1 views
0

ich einen 2D-Array in Javascript wie folgt deklarieren:Aktualisierung ein Objekt in Javascript 2d Array aktualisiert jedes einzelnes Objekt

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); 
} 

Später in dem Code, den ich ein Objekt im Array aktualisiert:

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

Aber nachdem ich dies getan habe, wird jedes besuchte Attribut jedes Objekts im Array als wahr markiert.

+0

Sie haben nur eine einzelne Zelle, verwiesen wiederholt in der Anordnung. Sie müssen sie entweder klonen oder jede Zelle in der Schleife erstellen. –

+1

Ihr Code setzt das gleiche Objekt 10-mal in das Array. Das Array enthält 10 Referenzen auf dasselbe einzelne Objekt. – Pointy

+0

Wie erstelle ich ein Array von separaten Zellobjekten? – Goblaz

Antwort

-1

Leider musste ich das Array mit getrennten Objekten nicht die gleiche „Zelle“ initiieren:

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

(Warum wurde das heruntergeregelt?) –

0

Wie @Pointy sagte Code haben diese Referenz Problem. Sie können dieses Problem mit Object.create() einen „Klon“ des Objekts Aufbau:

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;

Siehe auch Clone Object without reference javascript [duplicate]

Verwandte Themen