我有以下代码。
var emp={"EmployeeLists":[{"ID":1,"NAME":"Anbu","Salary":80000},{"ID":2,"NAME":"Anand","Salary":90000}]};
// Inserting a new object into EmployeeLists
emp.EmployeeLists.splice(2,0,emp.EmployeeLists[1])
console.log(JSON.stringify(emp));
输出: {"EmployeeLists":[{"ID":1,"NAME":"暗部","Salary":80000},{"ID":2, "NAME":"Anand","Salary":90000},{"ID":2,"NAME":"Anand","Salary":90000}]}
// Modifying inserted object NAME Anand into MANI
emp.EmployeeLists[2].NAME="MANI";
console.log(JSON.stringify(emp));
输出: {"EmployeeLists":[{"ID":1,"NAME":"暗部","Salary":80000},{"ID":2, "NAME":"**MANI**","Salary":90000},{"ID":2,"NAME":"**MANI**","Salary":90000}]}
添加新对象后。我试图将该对象的名称 Anand 修改为 MANI 但它被修改为对象的名称 Two 和 Three .
最佳答案
好问题!您所看到的是对象的底层共享,因为如果您不小心,Javascript 会 secret 地将对象视为 C 中的指针。让我们重写它来制作对象的克隆。我们将使用 this previous Stackoverflow answer (在 Javascript 中克隆对象非常烦人)。
function clone(obj) {
if (null == obj || "object" != typeof obj) return obj;
var copy = obj.constructor();
for (var attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = obj[attr];
}
return copy;
}
emp.EmployeeLists.splice(2, 0, clone(emp.EmployeeLists[1]));
emp.EmployeeLists[2].NAME = "MANI";
// {"EmployeeLists":[{"ID":1,"NAME":"Anbu","Salary":80000},{"ID":2,"NAME":"Anand","Salary":90000},{"ID":2,"NAME":"MANI","Salary":90000}]}
关于javascript - 在javascript中修改对象值的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22728466/