Như chúng ta biết trong mảng Javascript và các đối tượng là do tham chiếu, nhưng những cách nào chúng ta có thể sao chép mảng mà không thay đổi mảng ban đầu sau đó?
Dưới đây là một số cách để làm điều đó:
Hãy tưởng tượng chúng tôi có mảng này trong mã của bạn:
var arr = [1, 2, 3, 4, 5];
1) Vòng qua mảng trong một hàm và trả về một mảng mới, như thế này:
function newArr(arr) {
var i=0, res = [];
while(i<arr.length){
res.push(arr[i]);
i++;
}
return res;
}
2) Sử dụng phương thức lát, lát là để cắt một phần của mảng, nó sẽ cắt một phần của mảng mà không chạm vào bản gốc, trong lát, nếu không chỉ định bắt đầu và kết thúc của mảng, nó sẽ cắt toàn bộ mảng mảng và về cơ bản tạo một bản sao đầy đủ của mảng, vì vậy chúng ta có thể dễ dàng nói:
var arr2 = arr.slice(); // make a copy of the original array
3) Cũng là phương thức liên hệ, đây là để hợp nhất hai mảng, nhưng chúng ta chỉ có thể chỉ định một trong các mảng và sau đó điều này về cơ bản tạo một bản sao của các giá trị trong mảng được liên hệ mới:
var arr2 = arr.concat();
4) Cũng là phương thức xâu chuỗi và phân tích cú pháp, nó không được khuyến khích, nhưng có thể là một cách dễ dàng để sao chép Mảng và Đối tượng:
var arr2 = JSON.parse(JSON.stringify(arr));
5) Phương thức Array.from, điều này không được hỗ trợ rộng rãi, trước khi sử dụng kiểm tra sự hỗ trợ trong các trình duyệt khác nhau:
const arr2 = Array.from(arr);
6) Cách ECMA6, cũng không được hỗ trợ đầy đủ, nhưng babelJs có thể giúp bạn nếu bạn muốn phiên dịch:
const arr2 = [...arr];
slice
vàsplice
hoạt động tuyệt vời và toán tử lây lan mới vàArray.from
có triển khai chậm hơn nhiều. Nhìn vào perfjs.fnfo