我在jquery中有一个json对象数组。我想复制一个对象,然后在if条件的基础上替换原始对象中的键值。但每次我替换单个对象中的值,它就会替换两个对象中的值。我只想更换一个原件 我使用了break并返回了false语句但是没有用。
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;
}
}
}
请有人帮忙,如果有条件的话。 提前致谢。
答案 0 :(得分:4)
执行finalJson.push(finalJson[it])
时,您将再次在数组中推送对旧对象的引用。因此,对一个引用执行的任何操作都将在新引用指向的对象上执行。这就是为什么你需要使用旧对象的属性创建一个新对象(使用Object.create
),然后推送它。
替换
finalJson.push(finalJson[it])
with(不要使用此选项)
<击> finalJson.push(的Object.create(finalJson [它]))击>
或较慢但深拷贝的选项
finalJson.push(JSON.parse(JSON.stringify(finalJson[it])));
答案 1 :(得分:1)
将对象复制到新变量时,您正在创建引用。您需要创建一个新对象来防止这种情况,否则应用于一个对象的更改将应用于另一个对象。