javascript - RangeError:array.push(...) 超出了最大调用堆栈大小
问题描述
下面的简单代码产生RangeError: Maximum call stack size exceeded
const arr = []
for (let i = 0; i < 135000; i++) {
arr.push(i)
}
const arr2 = []
// something else here that changes arr2
arr2.push(...arr)
1)为什么会发生这种情况?(我只是将元素添加到数组中,为什么会增加堆栈大小?)
2)如何解决这个错误?(我的目标是在 arr2 中创建一个浅拷贝 arr)
解决方案
那里的扩展运算符将原始数组中的所有元素推入堆栈,就像.apply
:
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(', '));
因此,在这两种情况下您可以处理的数据量都受到堆栈大小的限制:
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);
你可以这样做:
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);
推荐阅读
- python-3.x - 如何用另一列值替换一列值
- firebase - 保护 Firestore 数据库免受管理员密钥弱点影响的最佳实践
- c# - Dropbox v2 SDK 点网删除共享链接
- prolog - Prolog 不计算列表的变量
- java - 在执行外部进程时更新我的 JavaFX 应用程序的视图
- angular - How does mat-autocomplete classList Input work?
- php - 使用 NICE 值运行 php-fpm 池
- javascript - 在 React 中将数据传递给组件(道具)
- laravel - 关于在 Laravel 中使用 Upsert 时插入关系的问题
- sql - 您可以在窗口函数中包含除法吗(红移)