Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

javascript에서 하나의 키를 제외하고 js 객체를 복제하는 방법은 무엇입니까?

<시간/>

하나의 키를 제외하고 개체를 복제하는 가장 쉬운 방법은 전체 개체를 복제한 다음 필요하지 않은 속성을 제거하는 것입니다. 그러나 복제는 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' } }