Làm cách nào để sao chép danh sách này sang danh sách khác trong javascript?
Bạn không thể sao chép một danh sách chỉ bằng cách gõ Show
Có nhiều cách để tạo một bản sao, một cách là sử dụng phương thức Danh sách tích hợp sẵn Thí dụTạo một bản sao của danh sách bằng phương thức thislist = ["apple", "banana", "cherry"] Một cách khác để tạo một bản sao là sử dụng phương pháp tích hợp sẵn Thí dụTạo một bản sao của danh sách bằng phương thức thislist = ["apple", "banana", "cherry"] Các phương pháp sao chép một đối tượng hoặc mảng thông thường chỉ tạo ra một bản sao nông, vì vậy các tham chiếu được lồng sâu là một vấn đề. Bạn cần một bản sao sâu nếu một đối tượng JavaScript chứa các đối tượng khácẢnh của João Silas trên Bapt Bản sao nông là gì?M tạo một bản sao nông của một mảng hoặc đối tượng có nghĩa là tạo các tham chiếu mới đến các giá trị nguyên thủy bên trong đối tượng, sao chép chúng. Điều đó có nghĩa là những thay đổi đối với mảng ban đầu sẽ không ảnh hưởng đến mảng đã sao chép, đó là điều sẽ xảy ra nếu chỉ tham chiếu đến mảng đã được sao chép (chẳng hạn như sẽ xảy ra với toán tử gán Một bản sao nông đề cập đến thực tế là chỉ có một cấp độ được sao chép và điều đó sẽ hoạt động tốt đối với một mảng hoặc đối tượng chỉ chứa các giá trị nguyên thủy Đối với các đối tượng và mảng chứa các đối tượng hoặc mảng khác, việc sao chép các đối tượng này yêu cầu một bản sao sâu. Mặt khác, những thay đổi được thực hiện đối với các tham chiếu lồng nhau sẽ thay đổi dữ liệu được lồng trong đối tượng hoặc mảng ban đầu Trong bài viết này, tôi mô tả 4 phương pháp tạo bản sao nông và sau đó là 5 phương pháp tạo bản sao sâu trong JavaScript Ảnh của Jakob Owens trên Bapt Bản sao nông sử dụng ________ 101. Toán tử trải rộng ( Như đã trình bày ở trên, toán tử trải rộng rất hữu ích để tạo các thể hiện mới của mảng không hoạt động ngoài ý muốn do các tham chiếu cũ. Do đó, toán tử trải rộng rất hữu ích để thêm vào một mảng trong Trạng thái phản ứng Ảnh của Donald Giannatti trên bản sao UnsplashShallow sử dụnglist2 22. Đối với các mảng cụ thể, sử dụng phương thức 3. Cùng một loại bản sao nông sẽ được tạo bằng cách sử dụng list2 54. Một phương pháp khác để sao chép một mảng JavaScript là sử dụng Nếu một đối tượng hoặc mảng chứa các đối tượng hoặc mảng khác, các bản sao nông sẽ hoạt động ngoài dự kiến, bởi vì các đối tượng lồng nhau không thực sự được sao chép Đối với các đối tượng được lồng sâu, sẽ cần một bản sao sâu. Tôi giải thích tại sao dưới đây Ảnh của brabus biturbo trên BaptCoi chừng Gotcha lồng sâuBật mặt khác, khi các đối tượng JavaScript bao gồm các mảng được lồng sâu vào nhau, toán tử trải rộng chỉ sao chép cấp độ đầu tiên bằng một tham chiếu mới, nhưng các giá trị sâu hơn vẫn được liên kết với nhau. Để giải quyết vấn đề này, cần phải tạo một bản sao sâu, trái ngược với một bản sao nông. Bản sao sâu có thể được tạo bằng lodash, rfdc hoặc R. clone() phương pháp từ thư viện lập trình chức năng Ramda. Tôi khám phá các bản sao sâu tiếp theo Ảnh của Landon Martin trên Bapt Bản sao sâu là gì?F hoặc các đối tượng và mảng chứa các đối tượng hoặc mảng khác, việc sao chép các đối tượng này yêu cầu một bản sao sâu. Mặt khác, những thay đổi được thực hiện đối với các tham chiếu lồng nhau sẽ thay đổi dữ liệu được lồng trong đối tượng hoặc mảng ban đầu. Điều này được so sánh với một bản sao nông, hoạt động tốt đối với một đối tượng hoặc mảng chỉ chứa các giá trị nguyên thủy, nhưng sẽ không thành công đối với bất kỳ đối tượng hoặc mảng nào có các tham chiếu lồng nhau đến các đối tượng hoặc mảng khác Hiểu được sự khác biệt giữa Tôi sẽ đề cập đến 5 phương pháp tạo bản sao sâu (hoặc bản sao sâu). lodash, Ramda, một chức năng tùy chỉnh, 1. Thư viện lodash là cách phổ biến nhất mà các nhà phát triển JavaScript tạo bản sao sâu. Nó rất dễ sử dụng. Tên của Lodash xuất phát từ thư viện được gọi là dấu gạch dưới ( 2. Thư viện lập trình chức năng Ramda bao gồm phương thức Lưu ý rằng 3. Khá dễ dàng để viết một hàm JavaScript đệ quy sẽ tạo một bản sao sâu của các đối tượng hoặc mảng lồng nhau. Đây là một ví dụ. Lưu ý rằng tôi cũng cần kiểm tra giá trị rỗng vì giá trị null của 4. Nếu dữ liệu của bạn phù hợp với thông số kỹ thuật (xem bên dưới), thì
Để chứng minh một số lý do tại sao phương pháp này thường không được khuyến nghị, đây là một ví dụ về việc tạo một bản sao sâu bằng cách sử dụng Một chức năng tùy chỉnh hoặc các thư viện được đề cập có thể tạo một bản sao sâu mà không cần phải lo lắng về loại nội dung, mặc dù các tham chiếu vòng tròn sẽ làm hỏng tất cả chúng Tiếp theo, tôi thảo luận về một thư viện cực nhanh có tên là 5. Để có hiệu suất tốt nhất, thư viện
Sử dụng Thư viện Tham chiếu vòng tròn sẽ phá vỡ các thuật toán sao chép sâu khác được thảo luận Một thư viện như vậy sẽ hữu ích nếu bạn đang xử lý một đối tượng lớn, phức tạp, chẳng hạn như một đối tượng được tải từ các tệp JSON có kích thước từ 3MB-15MB Dưới đây là các điểm chuẩn, cho thấy
davidmarkclements/rfdcBản sao sâu thực sự nhanh. Đóng góp cho sự phát triển của davidmarkclements/rfdc bằng cách tạo một tài khoản trên GitHubgithub. com rfdcBản sao sâu thực sự nhanhwww. npmjs. com Ảnh của Scott Webb trên UnsplashPerformance of JavaScript Copy AlgorithmsTrong số các thuật toán sao chép khác nhau, các bản sao nông là nhanh nhất, tiếp theo là các bản sao sâu sử dụng chức năng tùy chỉnh hoặc
Việc sử dụng Nó thực sự khá dễ dàng để tránh phải sao chép sâu trong JavaScript — nếu bạn không bao giờ có thể lồng các đối tượng và mảng vào trong nhau. Bởi vì trong trường hợp đó — khi không có lồng nhau và các đối tượng cũng như mảng chỉ chứa các giá trị nguyên thủy — tạo một bản sao nông với toán tử trải rộng ( Tuy nhiên, trong thế giới thực, nơi các đối tượng có các mảng bên trong chúng hoặc ngược lại, thì một bản sao sâu sẽ cần được sử dụng. Tôi khuyên dùng (Lưu ý rằng một số người cũng có thể đề xuất sử dụng |