3 cách để Clone Objects trong JavaScript

Tram Ho

Xin chào các bạn, học JavaScript chắc chắn chúng ta phải biết đến Object. Trong một số bài toán cụ thể, đôi khi ta sẽ cần đến thao tác ‘Clone Objects’ để thực hiện các function khác nhau. Bài viết này sẽ giới thiệu tới các bạn ‘3 cách để Clone Objects trong JavaScript’

Objects là một loại tham chiếu

Lần đầu clone 1 obj mình cũng sử dụng phép gán =, log ra kết quả khá như ý

Tuy nhiên khi thêm mới/sửa 1 item nào đó hãy xem điều gì sẽ xảy ra

Tại sao Object ban đầu vẫn bị ảnh hưởng ? Đó là vì Object là loại tham chiếu, vì vậy khi bạn sử dụng =, nó đã sao chép con trỏ vào không gian bộ nhớ mà nó chiếm, các kiểu tham chiếu không giữ các giá trị, chúng là một con trỏ tới giá trị trong bộ nhớ. Vì vậy ta cần tìm đến một phương án khác để Clone Object mà không ảnh hưởng tới Object ‘gốc’

1. Sử dụng Spread

Sử dụng Spread sẽ giúp ta clone Obj. Lưu ý khi sử dụng nó bạn có thể cần phải compile cùng với Babel

2. Sử dụng Object.assign

Ngoài IE huyền thoại thì Object.assign support hầu như đầy đủ, Object.assign nằm trong bản phát hành chính thức và ta có thể dùng nó để clone 1 Obj nhanh chóng. Xem thêm về Object.assign()

3. Sử dụng JSON

Shallow Clone vs Deep Clone

Một sự so sánh nhẹ giữa clone “nông” và clone “sâu”. Cùng quan sát ví dụ sau

Clone “nông” có nghĩa ta chỉ clone được level đầu, các level sâu hơn sẽ được hiểu là tham chiếu. Và khi sử dụng cách 3

Object.assign vs Spread

Object.assign là một hàm sửa đổi và trả về đối tượng đích. Khi sử dụng

{} được hiểu là đối tượng được sửa đổi, đối tượng đích không được tham chiếu bởi bất kỳ biến nào tại thời điểm đó, nhưng vì Object.assign trả về đối tượng đích, chúng ta có thể lưu trữ đối tượng được gán kết quả vào biến cloneFood

Rõ ràng giá trị của corn trong đối tượng food là sai, vì vậy ta có thể gán giá trị chính xác cho corn bằng Object.assign. Chúng ta thực sự không sử dụng giá trị trả về của hàm, nhưng chúng ta đang sửa đổi đối tượng mục tiêu mà chúng ta đã tham chiếu với đối tượng food.

Spread là một cách sao chép các thuộc tính của một đối tượng thành một đối tượng mới

... gây ra lỗi, vì chúng ta sử dụng Spread tạo đối tượng mới và do đó đang gán một đối tượng hoàn toàn mới cho food được khai báo với hằng số const là sai. Giải pháp là tạo ra 1 biến mới để lưu đối tượng

hoặc có thể dùng let, var cho phép chúng ta gán một đối tượng hoàn toàn mới

Kết luận

Trên đây mình đã giới thiệu tới các bạn ‘3 cách để Clone Objects trong JavaScript’, hi vọng sẽ giúp ích cho các bạn khi làm việc với Object trong JavaScript

Nếu thấy bài viết hay, hãy cho mình +1 upvote nhé. Nếu thích mình hãy nhấn nút follow để biết thêm nhiều thứ hay ho hơn. Chúc bạn thành công !


Tham khảo 3 Ways to Clone Objects in JavaScript

Chia sẻ bài viết ngay

Nguồn bài viết : Viblo