Cách dễ nhất để sao chép một đối tượng ngoại trừ một khóa là sao chép toàn bộ đối tượng và sau đó xóa thuộc tính không cần thiết. Tuy nhiên, ép xung có thể có 2 loại -
- bản sao sâu
- nhân bản nông
Các bản sao cạn sao chép càng ít càng tốt. Bản sao cạn của bộ sưu tập là bản sao của cấu trúc bộ sưu tập, không phải các phần tử. Witha bản sao nông cạn, hai bộ sưu tập hiện chia sẻ các phần tử riêng lẻ.
Ví dụ
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' } }
Lưu ý rằng các bản sao cạn không tạo ra các bản sao một cách đệ quy. Nó chỉ hoạt động ở cấp cao nhất.
Bản sao sâu nhân bản mọi thứ. Bản sao sâu của một bộ sưu tập là các bộ sưu tập hai màu với tất cả các phần tử trong bộ sưu tập gốc được sao chép.
Ví 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' } }
Khi bạn nhận được một bản sao bằng cách sử dụng một trong các phương pháp này, bạn có thể xóa sản phẩm mà bạn không cần bằng cách sử dụng từ khóa xóa. Ví dụ:
Ví dụ
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' } }