Javascript 如何在数组中设置推送对象的属性?

Javascript 如何在数组中设置推送对象的属性?,javascript,jquery,arrays,json,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(ali

我有一个目标

{
    "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":""}]}]}');

由于
align
是同一个对象,因此设置
属性时,这两个项都指向相同的引用,它们将被覆盖

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

由于
align
是同一个对象,因此设置
属性时,这两个项都指向相同的引用,它们将被覆盖

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

您正在推送参考资料。。。一方面的任何变化都会反映在另一方面。试试看。它将创建一个不引用对象的副本

var jObj={
“标题”:[{
“项目”:[]
}]
}
var align={“align”:“};
jObj[“header”][0].items.push(Object.assign({},align));
jObj[“header”][0].items.push(Object.assign({},align));
jObj[“标题”][0]。项目[0]。align=“右”;
jObj[“header”][0]。项目[1]。align=“left”;

console.log(jObj)您正在推送引用。。。一方面的任何变化都会反映在另一方面。试试看。它将创建一个不引用对象的副本

var jObj={
“标题”:[{
“项目”:[]
}]
}
var align={“align”:“};
jObj[“header”][0].items.push(Object.assign({},align));
jObj[“header”][0].items.push(Object.assign({},align));
jObj[“标题”][0]。项目[0]。align=“右”;
jObj[“header”][0]。项目[1]。align=“left”;

console.log(jObj)所以,我指向同一个被引用了两次的对象,这使它能够创建一个新对象。似乎有效。我以前从未见过这个符号叫什么?这个叫做
spread
操作符,将创建一个浅拷贝…当然这个方法在IE中不起作用,我不知道为什么任何人都必须支持它。函数spreadify(item){var clone={};for(var key in item){if(item.hasOwnProperty(key))//确保不添加继承的道具克隆[key]=item[key];}返回克隆;};所以,我指向同一个被引用了两次的对象,这使它能够创建一个新的对象。似乎有效。我以前从未见过这个符号叫什么?这个叫做
spread
操作符,将创建一个浅拷贝…当然这个方法在IE中不起作用,我不知道为什么任何人都必须支持它。函数spreadify(item){var clone={};for(var key in item){if(item.hasOwnProperty(key))//确保不添加继承的道具克隆[key]=item[key];}返回克隆;};