하나의 키를 제외하고 개체를 복제하는 가장 쉬운 방법은 전체 개체를 복제한 다음 필요하지 않은 속성을 제거하는 것입니다. 그러나 복제는 2가지 유형이 될 수 있습니다. -
- 딥 클론
- 얕은 복제
얕은 사본은 가능한 한 적게 복제합니다. 컬렉션의 얕은 복사본은 요소가 아니라 컬렉션 구조의 복사본입니다. 얕은 사본을 사용하면 이제 두 컬렉션이 개별 요소를 공유합니다.
예시
let innerObj = { a: 'b', c: 'd' } let obj = { x: "test", y: innerObj } // Create a shallow copy. let copyObj = Object.assign({}, obj); // Both copyObj and obj's prop y now refers to the same innerObj. Any changes to this will be reflected. innerObj.a = "test" console.log(obj) console.log(copyObj) This will give the output: { x: 'test', y: { a: 'test', c: 'd' } } { x: 'test', y: { a: 'test', c: 'd' } }
얕은 복사본은 복제를 재귀적으로 만들지 않습니다. 최상위 수준에서만 수행됩니다.
깊은 복사는 모든 것을 복제합니다. 컬렉션의 전체 복사본은 원본 컬렉션의 모든 요소가 복제된 두 개의 컬렉션입니다.
예시
let innerObj = { a: 'b', c: 'd' } let obj = { x: "test", y: innerObj } // Create a deep copy. let copyObj = JSON.parse(JSON.stringify(obj)) // Both copyObj and obj's prop y now refers to the same innerObj. Any changes to this will be reflected. innerObj.a = "test" console.log(obj) console.log(copyObj) This will give the output: { x: 'test', y: { a: 'test', c: 'd' } } { x: 'test', y: { a: 'b', c: 'd' } }
이러한 방법 중 하나를 사용하여 복사본을 얻은 후에는 delete 키워드를 사용하여 필요하지 않은 속성을 제거할 수 있습니다. 예를 들어,
예시
let original = { x: 'test', y: { a: 'test', c: 'd' } } let copy = JSON.parse(JSON.stringify(original)) delete copy['x'] console.log(copy) console.log(original) This will give the output: { y: { a: 'test', c: 'd' } } { x: 'test', y: { a: 'test', c: 'd' } }