在JavaScript 2D阵列更新一个对象更新的每一个对象
问题描述:
我在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。
答
对不起,我需要开始与不同的对象不一样的“细胞”的阵列:
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
(为什么这是低调?) –
答
正如@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;
见你只有一个单细胞,在数组中多次引用。您需要克隆它们,或者在循环中创建每个单元格。 –
您的代码将10次完全相同的对象放入数组中。该数组将包含10个对同一个单一对象的引用。 – Pointy
如何创建单独的单元格对象的数组? – Goblaz