2017-10-19 6 views
1

새 스프레드 연산자로 배열이있는 객체를 복제하는 방법은 무엇입니까?스프레드 연산자를 사용하여 배열로 객체 복제

예 개체 :

vehicles: { 
    cars: [1, 2], 
    boats: [3, 4] 
} 

나는 그 안에 배열을 가진 새로운 개체를 원한다. 이 새로운 객체에서 나는 차량 객체를 참조하고 영향을 미치지 않고 배열을 변경하거나 추가 할 수 있기를 원합니다.

+0

당신은 당신의 새로운 객체의 내용을 지정할 수 있습니까? – void

+0

확산 연산자는 얕은 사본을 만들어 모든 심층 개체가 여전히 불행히도 참조됩니다. –

답변

3

Object.assign 및 스프레드 연산자는 참조 된 것보다 얕은 한 수준의 얕은 클론을 만듭니다. 내가 발견 한 가장 좋은 방법은 (감사합니다 MDN) JSON 함수를 사용하여 진정한 복제물을 만드는 것입니다.

let vehicles = { 
 
    cars: [1, 2], 
 
    boats: [3, 4], 
 
}; 
 

 
let test = JSON.parse(JSON.stringify(vehicles)); 
 

 
console.log(vehicles, test); 
 

 
test.cars[0] = 5; 
 
vehicles.cars[0] = 7; 
 

 
console.log(vehicles, test);

+0

훌륭한 솔루션! – Euroclydon37

+0

대형 물체가 있으면 어떨까요? 그 상황에서 처리 할 수 ​​있습니까? – Sumit

+0

큰 단일 레벨 개체가있는 경우 Object.assign을 사용하는 것이 좋습니다 (개인적 의견). 내가 할 일을 할 때 기본 제공 언어 함수를 사용하는 것이 더 좋습니다. 큰 다단계 객체의 경우이 메서드는 정상적으로 작동합니다. –