gpt4 book ai didi

javascript - Node JS - 对象值更新奇怪的行为

转载 作者:太空宇宙 更新时间:2023-11-04 02:36:31 25 4
gpt4 key购买 nike

我有一个简单的对象,我试图修改它,结果令人费解。这是在 Node.js 中执行的。

我有一个对象如下:

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”,而不仅仅是引用的颜色。我像这样设置值:

元素[绿色].key3[id1][p2] = someArray;

括号中的所有内容都是指向键名称的变量。上面的输出设置了 3 个值... Green 的所有 id - green.key3.id1.p2、.id2.p2 和 .id3.p2 全部为我只想要 green.key3.id1.p2 的值

对于这里可能发生的事情有什么想法吗?预先感谢您的帮助。

最佳答案

你是如何构建这个对象的?您可能已为某种颜色的每个 p2 分配了相同的空数组。当您这样做时,每个 p2 将是对同一数组的引用,因此将一个值插入一个数组显然会将该值插入每个数组。要测试这些是否是对同一数组的引用,请检查:

green.key3.id1.p2 === red.key3.id2.p2

如果这给你true,那么我上面说的就是这种情况。本质上是这样的:

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).

编辑

重读后,可能实际上id1id2等被分配给了同一个对象。即

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();

每个 new Id() 将是一个新对象。

关于javascript - Node JS - 对象值更新奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21790535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com