在javascript 2d数组中更新一个对象会更新每个对象

时间:2016-04-25 13:05:50

标签: javascript arrays object multidimensional-array

我在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。

2 个答案:

答案 0 :(得分:0)

正如@Pointy所说,你的代码有这个参考问题。您可以使用Object.create()构建&#34;克隆&#34;来解决此问题。对象:

&#13;
&#13;
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;
&#13;
&#13;
&#13;

另见Clone Object without reference javascript [duplicate]

答案 1 :(得分:-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});
}
相关问题