Hướng dẫn copy array of array javascript - sao chép mảng của mảng javascript

Hướng dẫn copy array of array javascript - sao chép mảng của mảng 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ị.

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

Trả lời: Có các phương pháp khác nhau để sao chép một mảng.Bạn có thể sử dụng một vòng lặp và sao chép các thành phần của một đến một.Sử dụng phương pháp nhân bản để nhân bản một mảng.Sử dụng phương thức ArrayCopy () của lớp hệ thống.use a for loop and copy elements of one to another one by one. Use the clone method to clone an array. Use arraycopy() method of System class.

Bạn có thể có một mảng mảng trong JavaScript không?

JavaScript không cung cấp mảng đa chiều nguyên bản.Tuy nhiên, bạn có thể tạo một mảng đa chiều bằng cách xác định một mảng các phần tử, trong đó mỗi phần tử cũng là một mảng khác.Vì lý do này, chúng ta có thể nói rằng một mảng đa chiều JavaScript là một mảng mảng.you can create a multidimensional array by defining an array of elements, where each element is also another array. For this reason, we can say that a JavaScript multidimensional array is an array of arrays.

Bạn có thể sao chép một mảng trong JavaScript có bao nhiêu cách?

Có ít nhất 6 (!)lát cắt.at least 6 (!) ways to clone an array: loop. slice.

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

Các kỹ thuật cắt lát () và myArray.concat () có thể được sử dụng để sao chép sâu các mảng bằng các giá trị theo nghĩa đen (boolean, số và chuỗi);Trường hợp Slice () có hiệu suất cao nhất trong Chrome và lan truyền ... có hiệu suất cao nhất trong Firefox.JSON.Parse (json. concat() techniques can be used to deep copy arrays with literal values (boolean, number, and string) only; where slice() has the highest performance in Chrome, and spread ... has the highest performance in Firefox. The JSON. parse(JSON.