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

在javascript 2d数组中更新一个对象会更新每个对象,javascript,arrays,object,multidimensional-array,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,ce

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

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

很抱歉,我需要使用不同的对象(而不是相同的“单元格”)启动数组:

(i=0;i<10;i++)的
for//启动二维单元格数组。
{
cells[i]=新数组({访问:false,左:true,上:true,右:true,下:true},
{访问:false,left:true,top:true,right:true,bottom:true},
{访问:false,left:true,top:true,right:true,bottom:true},
{访问:false,left:true,top:true,right:true,bottom:true},
{访问:false,left:true,top:true,right:true,bottom:true},
{访问:false,left:true,top:true,right:true,bottom:true},
{访问:false,left:true,top:true,right:true,bottom:true},
{访问:false,left:true,top:true,right:true,bottom:true},
{访问:false,left:true,top:true,right:true,bottom:true},
{访问:假,左:真,上:真,右:真,下:真});
}

正如@Pointy所说,您的代码有这个引用问题。您可以通过
Object.create()
构建对象的“克隆”来解决此问题:

cell={visted:false,left:true,top:true,right:true,bottom:true}
单元=新阵列(10);
对于(i=0;i<10;i++)//启动二维单元格数组。
{
单元[i]=新阵列(
创建(单元格),
创建(单元格),
创建(单元格),
创建(单元格),
创建(单元格),
创建(单元格),
创建(单元格),
创建(单元格),
创建(单元格),
创建(单元格)
);
}

单元格[0][0]。已访问=真只有一个单元格,在数组中重复引用。你或者需要克隆它们,或者在循环中创建每个单元格。你的代码将完全相同的对象放入数组10次。数组将包含对同一单个对象的10个引用。我如何创建一个由单独单元格对象组成的数组?通过单独创建每个单元格,或克隆初始状态。您能给我一个示例吗?
cells[0][0].visited = true;
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});
}