javascript - 在javascript中修改对象值的问题

标签 javascript jquery

我有以下代码。

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 但它被修改为对象的名称 TwoThree .

最佳答案

好问题!您所看到的是对象的底层共享,因为如果您不小心,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/

相关文章:

javascript - jquery window.open 在 ajax 成功中被阻止

jquery - 如何确保我可以点击具有最高 z-index 的 div?

javascript - 根据 amCharts 中的当前缩放更改网格

jquery - 使用 jQuery 将值插入输入字段?

javascript - 单击 iframe 时如何隐藏父元素

javascript - 在javascript onclick中为标签添加样式

javascript - 单击 TR 时确定目标 TD

javascript - 如何在angularjs中使用 Action 按钮制作启动画面

java - 使用ajax和spring portlet将文件从客户端上传到服务器端

javascript - WebRTC:如何计算RTC Peer Connection的用户带宽/网络延迟