更新2D数组中元素的属性总是会奇怪地影响整个数组

时间:2015-05-05 21:31:44

标签: javascript arrays

我现在遇到了JS 2D阵列的奇怪问题。假设我有一个2D数组(嵌套)A,定义为:

var A = [ [ {}, {}, {} ], [ {}, {}, {} ], [ {}, {}, {} ] ];

从上面,A是一个嵌套的2D数组,其中每个元素都是一个空对象。然后我想在(0,0)的元素中添加一个属性foo。因为元素是空的,我可以通过以下方式替换它的值:

A[0][0] = {foo: 199};

然后我的数组变成:A = [ [ {foo: 199}, {}, {} ], [ {}, {}, {} ], [ {}, {}, {} ] ];。这是正确的。

但是,我的目标是动态地将新属性foo添加到该数组中的现有对象,而不是替换其整个值。我试过了:

A[0][0].foo = 199;

它不起作用。我的整个阵列奇怪地变成了:

[ [ { foo: 199 }, { foo: 199 }, { foo: 199 } ],
[ { foo: 199 }, { foo: 199 }, { foo: 199 } ],
[ { foo: 199 }, { foo: 199 }, { foo: 199 } ] ]

这显然不是它的意思。我只想设置单元格的foo(0,0),但效果却应用于整个数组。

我也尝试过:

A[0][0]['foo'] = 199;

但整个数组也受到影响,而不仅仅是位置(0,0)的唯一元素。

任何想法,有人发现任何错误吗? 如何动态地将属性foo添加到2D数组的元素?

0 个答案:

没有答案