[英]Node JS - Object Value Update Strange Behavior
我有一個要修改的簡單對象,結果令人費解。 這是在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”,而不僅僅是引用的那個。 我正在這樣設置值:
element [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
如果這讓你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).
重新讀取后,可能實際上是將id1
, id2
等分配給了同一對象。 即
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()
將是一個新對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.