如何设置数组内被推送对象的属性?

时间:2018-08-06 19:52:47

标签: javascript jquery arrays json

我有一个对象。

{
    "header": [{        
        "items": []
    }]
}

var jObj = jQuery.parseJSON('{"header":[{"items":[]}]}');

我将一个物体推到物品上

var align = jQuery.parseJSON('{"align":""}');
jObj["header"][0].items.push(align);
jObj["header"][0].items.push(align);

我设置了值

jObj["header"][0].items[0].align = "right";
jObj["header"][0].items[1].align = "left";

console.log(JSON.stringify(jObj));

两个对齐方式都获得相同的值,如何设置这些值?

输出

  

{“ header”:[{“ items”:[{“ align”:“ left”},{“ align”:“ left”}]}}}

这似乎可行,但我需要动态地实现。

var jObj = jQuery.parseJSON('{"header":[{"items":[{"align":""},{"align":""}]}]}');

2 个答案:

答案 0 :(得分:2)

您正在推动参考...一个中的任何更改都会反映在另一个中。请尝试使用Object.assign({}, align)。它将创建一个没有引用该对象的副本。

var jObj = {
    "header": [{        
        "items": []
    }]
}

var align = {"align": ""};
jObj["header"][0].items.push(Object.assign({}, align));
jObj["header"][0].items.push(Object.assign({}, align));

jObj["header"][0].items[0].align = "right";
jObj["header"][0].items[1].align = "left";

console.log(jObj);

PD:Js将json视为数组,因此无需解析。

答案 1 :(得分:0)

由于align是同一对象,因此当您设置property对齐方式时,两个项目都指向相同的参考。

jObj["header"][0].items.push(align);
jObj["header"][0].items.push({...align});