Mã đơn giản dưới đây tạo ra
const arr = [];
for [let i = 0; i < 10; i++] {
arr.push[i];
}
const arr2 = [];
// Something else here that changes arr2:
arr2.push[0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
Array.prototype.push.apply[arr2, arr];
console.log[arr2.join[', ']];
0const arr = []
for [let i = 0; i < 135000; i++] {
arr.push[i]
}
const arr2 = []
// something else here that changes arr2
arr2.push[...arr]
1] Tại sao điều này xảy ra? [Tôi chỉ đơn giản là thêm phần tử vào một mảng, tại sao nó tăng kích thước ngăn xếp?]
2] Làm thế nào để khắc phục lỗi này? [Mục tiêu của tôi là tạo một bản sao nông của ARR vào ARR2]
Khi được hỏi ngày 11 tháng 5 năm 2020 lúc 22:36May 11, 2020 at 22:36
2
Toán tử lây lan ở đó đẩy tất cả các phần tử trong mảng ban đầu vào ngăn xếp, giống như
const arr = [];
for [let i = 0; i < 10; i++] {
arr.push[i];
}
const arr2 = [];
// Something else here that changes arr2:
arr2.push[0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
Array.prototype.push.apply[arr2, arr];
console.log[arr2.join[', ']];
1:const arr = [];
for [let i = 0; i < 10; i++] {
arr.push[i];
}
const arr2 = [];
// Something else here that changes arr2:
arr2.push[0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
Array.prototype.push.apply[arr2, arr];
console.log[arr2.join[', ']];
Vì vậy, lượng dữ liệu bạn có thể xử lý trong cả hai trường hợp bị giới hạn bởi kích thước ngăn xếp:
const arr = [];
for [let i = 0; i < 135000; i++] {
arr.push[i];
}
const arr2 = [];
// Something else here that changes arr2:
arr2.push[0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
Array.prototype.push.apply[arr2, arr];
console.log[arr.length, arr2.length];
Bạn có thể làm điều này thay thế:
const arr = [];
for [let i = 0; i < 135000; i++] {
arr.push[i];
}
let arr2 = [];
// Something else here that changes arr2:
arr2.push[0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
arr2 = [...arr2, ...arr];
console.log[arr.length, arr2.length];
Đã trả lời ngày 11 tháng 5 năm 2020 lúc 23:07May 11, 2020 at 23:07
DanzigerdanzigerDanziger
17,5K4 Huy hiệu vàng46 Huy hiệu bạc77 Huy hiệu đồng4 gold badges46 silver badges77 bronze badges
Khi bạn sử dụng toán tử lây lan, tất cả các mục của mảng nguồn được lưu trữ trong danh sách các đối số, do đó, có một số lượng lớn các mục [~> 100k] sẽ khiến kích thước ngăn xếp này vượt quá.
Công việc đơn giản nhất là để đẩy từng vật phẩm theo cách thủ công.
Bạn có thể có chức năng trợ giúp/tiện ích như thế này:
function largePush[src, dest]{
const len = src.length
for[let i = 0; i < len; i++]{
dest.push[src[i]]
}
}
và sử dụng nó như thế này:
const arr = []
for [let i = 0; i < 135000; i++] {
arr.push[i]
}
const arr2 = []
largePush[arr, arr2]
Đã trả lời ngày 22 tháng 8 lúc 10:45Aug 22 at 10:45
DahoudahouDahou
5034 Huy hiệu bạc11 Huy hiệu đồng4 silver badges11 bronze badges
//I hope this will help you to make shallow copy of arr into arr2
let arr = []
for [let i = 0; i < 135000; i++] {
arr.push[i]
}
let arr2 = []
// something else here that changes arr2
arr2=arr
console.log[arr2[0],arr[0]];
//Both 0,0
arr[0]=100
console.log[arr[0],arr2[0]]
//Both 100,100
Đã trả lời ngày 11 tháng 5 năm 2020 lúc 23:44May 11, 2020 at 23:44
1
Hôm nay, làm việc với Preact, tôi đã nhận thấy & nbsp; ngoại lệ gây ra bởi
2 được sử dụng với cú pháp lan truyền [const arr = [];
for [let i = 0; i < 10; i++] {
arr.push[i];
}
const arr2 = [];
// Something else here that changes arr2:
arr2.push[0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
Array.prototype.push.apply[arr2, arr];
console.log[arr2.join[', ']];
3].const arr = [];
for [let i = 0; i < 10; i++] {
arr.push[i];
}
const arr2 = [];
// Something else here that changes arr2:
arr2.push[0, 0, 0, 0, 0, 0, 0, 0, 0, 0];
Array.prototype.push.apply[arr2, arr];
console.log[arr2.join[', ']];
Tôi đã quyết định lặp lại bài kiểm tra về trường hợp đơn giản hơn, AO tập lệnh mà tôi đã thử nghiệm theo Google Chrome & NBSP; 97.0.4676:
const array = Array[500000].fill[0];
const backup = Array[];
backup.push[...array];
console.log[array.length];
console.log[backup.length];
Exception:
push_test.htm:6 Uncaught RangeError: Maximum call stack size exceeded
at push_test.htm:6
Screenshot:
Bất kỳ ý tưởng tại sao nó không được phép thêm các mặt hàng theo cách này? Có một số tái phát bên trong?
Trong JavaScript, các chức năng có & nbsp; một số lượng hạn chế các đối số cho mỗi cuộc gọi.
Trong trường hợp trên ____ 14 & nbsp; vượt qua số lượng lớn các Arument trong cuộc gọi.
Đó là cùng một trường hợp như & nbsp; bạn không thể & nbsp; để sử dụng ________ 15 & nbsp; Gọi chức năng Polling & nbsp; ____ ____ 16 mảng - cùng một vấn đề.
Cố gắng sử dụng & nbsp; vòng lặp:
const array = Array[500000].fill[0];
const backup = Array[];
for [let i = 0; i < array.length; ++i]
backup.push[array[i]];
console.log[array.length];
console.log[backup.length];
Preview: