Javascript 复制对象,然后更新JSON对象中的值
我在jquery中有一个json对象数组。我想复制一个对象,然后根据if条件替换原始对象中的键值。但每次我替换单个对象中的值时,它就会替换两个对象中的值。我只想更换一件,即原件 我使用了中断和返回错误声明,但不工作Javascript 复制对象,然后更新JSON对象中的值,javascript,jquery,json,Javascript,Jquery,Json,我在jquery中有一个json对象数组。我想复制一个对象,然后根据if条件替换原始对象中的键值。但每次我替换单个对象中的值时,它就会替换两个对象中的值。我只想更换一件,即原件 我使用了中断和返回错误声明,但不工作 var index=getIndex(class_id,teacher_id); finalJson[index]['teacher_name']='asad'; function getIndex(class_id,teacher_id){ for(var it
var index=getIndex(class_id,teacher_id);
finalJson[index]['teacher_name']='asad';
function getIndex(class_id,teacher_id){
for(var it in finalJson){
if(finalJson[it]['class'] == class_id && finalJson[it]['type'] == 'c'){
finalJson.push(finalJson[it])
return it;
}
}
}
如果情况不好,请大家帮忙。
提前谢谢 将对象复制到新变量时,您正在创建引用。您需要创建一个新对象来防止这种情况,否则应用于一个对象的更改将应用于另一个对象。当您执行
finalJson.push(finalJson[it])
时,您将再次在数组中推送对旧对象的引用。因此,对一个引用执行的任何操作都将对新引用所指向的对象执行。这就是为什么您需要使用旧对象的属性创建新对象(使用object.create
)然后推送它
替换
finalJson.push(finalJson[it])
使用(不使用此选项)
push(Object.create(finalJson[it]))
或者一个较慢但深度复制的选项
finalJson.push(JSON.parse(JSON.stringify(finalJson[it])));
相关问题:使用jQuery,您可以使用
$.extend({},finalJson[it])克隆对象
你能发布finalJson
吗?在问题中也是。用深度复制解决。Object.create(finalJson[it])
不会克隆对象,只会使用旧对象的原型创建新对象,所以每次旧对象更改时,新对象也会更改。@jcubic我知道它不会进行深度克隆,但在这种情况下,不需要进行深度克隆,因为OP的json似乎不是多级的。无论如何,我已经给出了另一个选项。Object.create(finalJson[it])
完全是错误的,因为它将像克隆引用一样工作,或者将对象分配给不同的变量a=finalJson[it]
如果您更改a
,它也将更改finalJson[it]
。原型也是如此。这根本不是克隆。@jcubic根据规范创建的新对象具有相同的属性。创建了新对象,但原型取自旧对象,因此如果更改旧对象,新对象将被修改。看看这个