Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Cách clone object JS bỏ qua một key trong JavaScript

Cách dễ nhất để clone object trừ một key là clone toàn bộ object rồi xóa property không cần. Việc clone có 2 loại:

  • deep clone (clone sâu)
  • shallow clone (clone nông)

Shallow copy sao chép càng ít càng tốt. Shallow copy của một collection là copy cấu trúc collection, không phải các element. Với shallow copy, hai collection chia sẻ các element riêng lẻ.

Ví dụ shallow copy

let innerObj = {
  a: 'b',
  c: 'd'
}
let obj = {
  x: "test",
  y: innerObj
}
// Tạo shallow copy
let copyObj = Object.assign({}, obj);
// Cả copyObj và obj.prop y giờ trỏ đến cùng innerObj. Thay đổi sẽ phản ánh qua nhau.
innerObj.a = "test";
console.log(obj);
console.log(copyObj);
// Kết quả:
// { x: 'test', y: { a: 'test', c: 'd' } }
// { x: 'test', y: { a: 'test', c: 'd' } }

Lưu ý: shallow copy không clone đệ quy, chỉ ở cấp độ top-level.

Deep copy sao chép mọi thứ. Deep copy của collection là hai collection với tất cả element trong collection gốc được clone.

Ví dụ deep copy

let innerObj = {
  a: 'b',
  c: 'd'
}
let obj = {
  x: "test",
  y: innerObj
}
// Tạo deep copy
let copyObj = JSON.parse(JSON.stringify(obj));
// copyObj và obj.prop y giờ trỏ đến innerObj khác nhau.
innerObj.a = "test";
console.log(obj);
console.log(copyObj);
// Kết quả:
// { x: 'test', y: { a: 'test', c: 'd' } }
// { x: 'test', y: { a: 'b', c: 'd' } }

Sau khi có bản copy bằng một trong hai cách, bạn có thể xóa property không cần bằng từ khóa delete. 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)
// Kết quả:
// { y: { a: 'test', c: 'd' } }
// { x: 'test', y: { a: 'test', c: 'd' } }