2014-03-29 31 views
3

我有以下代碼。問題修改javascript中的對象值

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":"Anbu","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":"Anbu","Salary":80000},{"ID":2,"NAME":"**MANI**","Salary":90000},{"ID":2,"NAME":"**MANI**","Salary":90000}]}

增加了一個新對象之後。我試圖修改該對象的名稱AnandMANI但它是修改名稱的對象兩個三個

+1

你的問題不清楚,你能解釋一下你究竟想做什麼? – tnanoba

回答

1

偉大的問題!你所看到的是對象的底層共享,因爲如果你不小心,Javascript會祕密地將對象指向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}]}