Javascript 节点JS-对象值更新奇怪行为
我有一个简单的对象,我正试图修改,结果令人费解。这是在node.js中执行的 我的目标如下:Javascript 节点JS-对象值更新奇怪行为,javascript,arrays,node.js,object,properties,Javascript,Arrays,Node.js,Object,Properties,我有一个简单的对象,我正试图修改,结果令人费解。这是在node.js中执行的 我的目标如下: var element = { ident: "value", green: { date: value2, key: value3, key2: value4, key3: { id1: { p1: [], p2: [], p3: [], p4:
var element = {
ident: "value",
green:
{ date: value2,
key: value3,
key2: value4,
key3:
{ id1:
{ p1: [],
p2: [],
p3: [],
p4: [] },
{ id2:
{ p1: [],
p2: [],
p3: [],
p4: [] },
{ id3:
{ p1: [],
p2: [],
p3: [],
p4: [] } } },
red:
{ date: value5,
key: value6,
key2: value7,
key3:
{ id1:
{ p1: [],
p2: [],
p3: [],
p4: [] },
{ id2:
{ p1: [],
p2: [],
p3: [],
p4: [] },
{ id3:
{ p1: [],
p2: [],
p3: [],
p4: [] } } } };
当我尝试将单个p2的值设置为我填充了一些数据的数组时,该颜色的每个p2都被设置,而不仅仅是被引用的那个。我这样设置值:
元素[green].key3[id1][p2]=someArray
括号中的所有内容都是指向键名称的变量。上面的输出设置了3个值。。。Green-Green.key3.id1.p2、.id2.p2和.id3.p2的所有ID都是我只想要Green.key3.id1.p2的值
关于这里可能发生的事情有什么想法吗?提前感谢您的帮助。您是如何构建此对象的?可能是您为颜色中的每个p2分配了相同的空数组。当您这样做时,每个p2都将是对同一数组的引用,因此将一个值推到一个数组中显然会将该值推到每个数组中。要测试这些是否是对同一数组的引用,请选中:
green.key3.id1.p2 === red.key3.id2.p2
如果这是真的,那么我上面说的就是事实。这基本上是这样的:
var a = [];
var b = a;
var c = a;
b.push(1); // b = [1], c = [1];
b === c; // true, since they are really references to the same object (array).
编辑
在重读之后,可能实际上id1、id2等被分配给同一对象。i、 e
var id = { p1: [], p2: [], p3: [] };
green.key3.id1 = id;
green.key3.id2 = id;
与上面一样,您可以通过执行以下操作来测试是否存在这种情况:
// true if these are really references to the same object.
green.key3.id1 === green.key3.id2;
如果您想要一种快速的方法来重用代码,而不需要这种行为,那么您可以执行以下操作:
function Id() {
this.p1 = [];
this.p2 = [];
this.p3 = [];
}
green.key3.id1 = new Id();
green.key3.id2 = new Id();
每个新Id都将是一个新对象。这个问题肯定有比你透露的更多的东西。也许可以向我们展示更多关于使用元素[green]的代码;情况似乎并非如此,因为OP似乎正在替换数组,而不是附加到一个元素[green]。[key3[id1][p2]=someArray@是的,重读一遍,发现了。不过,我怀疑罪犯仍然是一个有参考资料的问题。答案已更新。这些是对同一数组的引用。我正在重用一些代码来构建它,这就是问题所在。谢谢如果可以的话,我会投票的。