Hướng dẫn how do i make a copy of an array in javascript? - làm cách nào để tạo một bản sao của một mảng trong javascript?

Hướng dẫn how do i make a copy of an array in javascript? - làm cách nào để tạo một bản sao của một mảng trong javascript?

JavaScript có nhiều cách để làm bất cứ điều gì. Tôi đã viết trên 10 cách để viết ống/sáng tác bằng JavaScript và bây giờ chúng tôi đang thực hiện các mảng.

Show

1. Người vận hành lan truyền (bản sao nông)

Kể từ khi ES6 giảm, đây là phương pháp phổ biến nhất. Nó có một cú pháp ngắn gọn và bạn sẽ thấy nó cực kỳ hữu ích khi sử dụng các thư viện như React và Redux.

numbers = [1, 2, 3];
numbersCopy = [...numbers];

Lưu ý: Điều này không sao chép một cách an toàn các mảng đa chiều. Các giá trị mảng/đối tượng được sao chép bằng tham chiếu thay vì theo giá trị. This doesn’t safely copy multi-dimensional arrays. Array/object values are copied by reference instead of by value.

Điều này là tốt

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone

Điều này không ổn

nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references

2. Vòng lặp cũ cho () (bản sao nông)

Tôi tưởng tượng cách tiếp cận này là ít phổ biến nhất, được đưa ra cách lập trình chức năng hợp thời trang mà trở thành trong vòng tròn của chúng tôi.

Tinh khiết hoặc không trong sạch, tuyên bố hoặc bắt buộc, nó được hoàn thành công việc!

numbers = [1, 2, 3];
numbersCopy = [];

for (i = 0; i < numbers.length; i++) {
  numbersCopy[i] = numbers[i];
}

Lưu ý: Điều này không sao chép một cách an toàn các mảng đa chiều. Vì bạn sử dụng toán tử

nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
1, nên nó sẽ gán các đối tượng/mảng bằng cách tham chiếu thay vì theo giá trị. This doesn’t safely copy multi-dimensional arrays. Since you’re using the
nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
1 operator, it’ll assign objects/arrays by reference instead of by value.

Điều này là tốt

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone

Điều này không ổn

nestedNumbers = [[1], [2]];
numbersCopy = [];

for (i = 0; i < nestedNumbers.length; i++) {
  numbersCopy[i] = nestedNumbers[i];
}

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references

2. Vòng lặp cũ cho () (bản sao nông)

Tôi tưởng tượng cách tiếp cận này là ít phổ biến nhất, được đưa ra cách lập trình chức năng hợp thời trang mà trở thành trong vòng tròn của chúng tôi.

numbers = [1, 2, 3];
numbersCopy = [];
i = -1;

while (++i < numbers.length) {
  numbersCopy[i] = numbers[i];
}

Tinh khiết hoặc không trong sạch, tuyên bố hoặc bắt buộc, nó được hoàn thành công việc! This also assigns objects/arrays by reference instead of by value.

Điều này là tốt

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone

Điều này không ổn

nestedNumbers = [[1], [2]];
numbersCopy = [];

i = -1;

while (++i < nestedNumbers.length) {
  numbersCopy[i] = nestedNumbers[i];
}

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references

2. Vòng lặp cũ cho () (bản sao nông)

Tôi tưởng tượng cách tiếp cận này là ít phổ biến nhất, được đưa ra cách lập trình chức năng hợp thời trang mà trở thành trong vòng tròn của chúng tôi.

Tinh khiết hoặc không trong sạch, tuyên bố hoặc bắt buộc, nó được hoàn thành công việc!

Lưu ý: Điều này không sao chép một cách an toàn các mảng đa chiều. Vì bạn sử dụng toán tử

nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
1, nên nó sẽ gán các đối tượng/mảng bằng cách tham chiếu thay vì theo giá trị.

numbers = [1, 2, 3];
double = (x) => x * 2;

numbers.map(double);

3. Vòng lặp cũ trong while () (bản sao nông)

Giống như ________ 22, Impure, mệnh lệnh, blah, blah, blah, nó hoạt động! ?

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
0

Lưu ý: Điều này cũng gán các đối tượng/mảng bằng tham chiếu thay vì theo giá trị.

4. mảng.map (bản sao nông)

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
1

Tinh khiết hoặc không trong sạch, tuyên bố hoặc bắt buộc, nó được hoàn thành công việc! This also assigns objects/arrays by reference instead of by value.

Lưu ý: Điều này không sao chép một cách an toàn các mảng đa chiều. Vì bạn sử dụng toán tử nestedNumbers = [[1], [2]]; numbersCopy = [...nestedNumbers]; numbersCopy[0].push(300); console.log(nestedNumbers, numbersCopy); // [[1, 300], [2]] // [[1, 300], [2]] // They've both been changed because they share references 1, nên nó sẽ gán các đối tượng/mảng bằng cách tham chiếu thay vì theo giá trị.

3. Vòng lặp cũ trong while () (bản sao nông)

Giống như ________ 22, Impure, mệnh lệnh, blah, blah, blah, nó hoạt động! ?

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
2

Lưu ý: Điều này cũng gán các đối tượng/mảng bằng tham chiếu thay vì theo giá trị.

4. mảng.map (bản sao nông)

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
3

Quay trở lại lãnh thổ hiện đại, chúng tôi sẽ tìm thấy chức năng

nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
3. Bắt nguồn từ toán học,
nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
3 là khái niệm biến một tập hợp thành một loại khác, trong khi bảo tồn cấu trúc.

Tinh khiết hoặc không trong sạch, tuyên bố hoặc bắt buộc, nó được hoàn thành công việc! This also assigns objects/arrays by reference instead of by value.

Lưu ý: Điều này không sao chép một cách an toàn các mảng đa chiều. Vì bạn sử dụng toán tử nestedNumbers = [[1], [2]]; numbersCopy = [...nestedNumbers]; numbersCopy[0].push(300); console.log(nestedNumbers, numbersCopy); // [[1, 300], [2]] // [[1, 300], [2]] // They've both been changed because they share references 1, nên nó sẽ gán các đối tượng/mảng bằng cách tham chiếu thay vì theo giá trị.

3. Vòng lặp cũ trong while () (bản sao nông)

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
4

Giống như ________ 22, Impure, mệnh lệnh, blah, blah, blah, nó hoạt động! ?

Lưu ý: Điều này cũng gán các đối tượng/mảng bằng tham chiếu thay vì theo giá trị.

Tinh khiết hoặc không trong sạch, tuyên bố hoặc bắt buộc, nó được hoàn thành công việc! This also assigns objects/arrays by reference instead of by value.

Lưu ý: Điều này không sao chép một cách an toàn các mảng đa chiều. Vì bạn sử dụng toán tử nestedNumbers = [[1], [2]]; numbersCopy = [...nestedNumbers]; numbersCopy[0].push(300); console.log(nestedNumbers, numbersCopy); // [[1, 300], [2]] // [[1, 300], [2]] // They've both been changed because they share references 1, nên nó sẽ gán các đối tượng/mảng bằng cách tham chiếu thay vì theo giá trị.

3. Vòng lặp cũ trong while () (bản sao nông)

Giống như ________ 22, Impure, mệnh lệnh, blah, blah, blah, nó hoạt động! ?

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
5

Lưu ý: Điều này cũng gán các đối tượng/mảng bằng tham chiếu thay vì theo giá trị.

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
6

4. mảng.map (bản sao nông) This is a shallow copy, so it also assigns objects/arrays by reference instead of by value.

Quay trở lại lãnh thổ hiện đại, chúng tôi sẽ tìm thấy chức năng nestedNumbers = [[1], [2]]; numbersCopy = [...nestedNumbers]; numbersCopy[0].push(300); console.log(nestedNumbers, numbersCopy); // [[1, 300], [2]] // [[1, 300], [2]] // They've both been changed because they share references 3. Bắt nguồn từ toán học, nestedNumbers = [[1], [2]]; numbersCopy = [...nestedNumbers]; numbersCopy[0].push(300); console.log(nestedNumbers, numbersCopy); // [[1, 300], [2]] // [[1, 300], [2]] // They've both been changed because they share references 3 là khái niệm biến một tập hợp thành một loại khác, trong khi bảo tồn cấu trúc.

Trong tiếng Anh, điều đó có nghĩa là

nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
5 trả về một mảng có cùng độ dài mỗi lần.

Để tăng gấp đôi danh sách các số, hãy sử dụng

nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
3 với hàm
nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
7.

Còn nhân bản thì sao ??

Đúng vậy, bài viết này về các mảng nhân bản. Để nhân đôi một mảng, chỉ cần trả lại phần tử trong cuộc gọi

nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
3 của bạn. safely copies deeply nested objects/arrays!

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
7

Nếu bạn muốn có một chút toán học, nestedNumbers = [[1], [2]]; numbersCopy = [...nestedNumbers]; numbersCopy[0].push(300); console.log(nestedNumbers, numbersCopy); // [[1, 300], [2]] // [[1, 300], [2]] // They've both been changed because they share references 9 được gọi là danh tính. Nó trả về bất kỳ tham số nào mà nó đã được đưa ra.

numbers = [1, 2, 3];
numbersCopy = [];

for (i = 0; i < numbers.length; i++) {
  numbersCopy[i] = numbers[i];
}
0 Bản sao một danh sách.

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
8

5. Array.Filter (bản sao nông)

numbersCopy.push(4);
console.log(numbers, numbersCopy);
// [1, 2, 3] and [1, 2, 3, 4]
// numbers is left alone
9

Tinh khiết hoặc không trong sạch, tuyên bố hoặc bắt buộc, nó được hoàn thành công việc! This also assigns objects/arrays by reference instead of by value.

Lưu ý: Điều này không sao chép một cách an toàn các mảng đa chiều. Vì bạn sử dụng toán tử nestedNumbers = [[1], [2]]; numbersCopy = [...nestedNumbers]; numbersCopy[0].push(300); console.log(nestedNumbers, numbersCopy); // [[1, 300], [2]] // [[1, 300], [2]] // They've both been changed because they share references 1, nên nó sẽ gán các đối tượng/mảng bằng cách tham chiếu thay vì theo giá trị.

3. Vòng lặp cũ trong while () (bản sao nông)

nestedNumbers = [[1], [2]];
numbersCopy = [...nestedNumbers];

numbersCopy[0].push(300);
console.log(nestedNumbers, numbersCopy);
// [[1, 300], [2]]
// [[1, 300], [2]]
// They've both been changed because they share references
0

Tinh khiết hoặc không trong sạch, tuyên bố hoặc bắt buộc, nó được hoàn thành công việc! This also assigns objects/arrays by reference instead of by value.

Lưu ý: Điều này không sao chép một cách an toàn các mảng đa chiều. Vì bạn sử dụng toán tử nestedNumbers = [[1], [2]]; numbersCopy = [...nestedNumbers]; numbersCopy[0].push(300); console.log(nestedNumbers, numbersCopy); // [[1, 300], [2]] // [[1, 300], [2]] // They've both been changed because they share references 1, nên nó sẽ gán các đối tượng/mảng bằng cách tham chiếu thay vì theo giá trị.

3. Vòng lặp cũ trong while () (bản sao nông)

Giống như ________ 22, Impure, mệnh lệnh, blah, blah, blah, nó hoạt động! ?



Lưu ý: Điều này cũng gán các đối tượng/mảng bằng tham chiếu thay vì theo giá trị.

Làm cách nào để sao chép một mảng trong JavaScript?

Bởi vì các mảng trong JS là các giá trị tham chiếu, vì vậy khi bạn cố gắng sao chép nó bằng cách sử dụng = nó sẽ chỉ sao chép tham chiếu vào mảng gốc chứ không phải giá trị của mảng. Để tạo một bản sao thực của một mảng, bạn cần sao chép giá trị của mảng theo một biến giá trị mới.copy over the value of the array under a new value variable.

Làm cách nào để tạo một bản sao của một mảng?

Methods:..
Lặp lại từng phần tử của mảng gốc đã cho và sao chép một phần tử tại một thời điểm ..
Sử dụng phương thức Clone () ..
Sử dụng phương thức ArrayCopy () ..
Sử dụng phương thức copyof () của lớp mảng ..
Sử dụng phương thức copyofrange () của lớp mảng ..

Những gì được sử dụng để sao chép một mảng trong JavaScript?

JavaScript mảng copywithin () Phương thức copyWithin () sao chép các phần tử mảng sang vị trí khác trong mảng.Phương thức CopyWithIn () ghi đè các giá trị hiện có.copyWithin() The copyWithin() method copies array elements to another position in the array. The copyWithin() method overwrites the existing values.

Bạn có thể sao chép một mảng vào một mảng khác không?

Hệ thống classarraycopy ().Điều này sao chép một mảng từ một mảng nguồn sang mảng đích, bắt đầu hành động sao chép từ vị trí nguồn đến vị trí đích cho đến khi độ dài được chỉ định.Số lượng các phần tử được sao chép vào mảng đích bằng với độ dài được chỉ định. arrayCopy(). This copies an array from a source array to a destination array, starting the copy action from the source position to the target position until the specified length. The number of elements copied to the target array equals the specified length.