2014-03-29 4 views
3

다음 코드가 있습니다.자바 스크립트에서 객체 값을 수정하는 데 문제가 발생했습니다.

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}]}

. 나는 MANI에 해당 객체 아난드의 이름을 수정하려하지만, 객체 의 이름을 수정됩니다.

+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}]} 
관련 문제