我有 js 函数来查找二维数组中的最小值和最大值,这在小数组上工作正常但是当我传递大数组时它给我 range error
:
Maximum call stack size exceeded.
我使用的是最新版本的 Chrome。
function MaxMin2dray(arr, idx){
return {
min: Math.min.apply(null, arr.map(function (e) { return e[idx]})),
max: Math.max.apply(null, arr.map(function (e) { return e[idx]}))
}
}
最佳答案
Math.min & Math.max
Math.min
和 Math.max
最有可能崩溃,或者对于大数组 (~10⁷) 返回 NaN
(参见@DavidWaters 和@EugeneGluhotorenko 评论)。
相反,您可以像这样使用旧的 javascript 循环:
(第二个函数要快得多)
function getMax(arr) {
return arr.reduce((max, v) => max >= v ? max : v, -Infinity);
}
或者
function getMax(arr) {
let len = arr.length;
let max = -Infinity;
while (len--) {
max = arr[len] > max ? arr[len] : max;
}
return max;
}
- 测试了 1,000,000 个项目:
第一个函数的运行时间(在我的机器上)是 15.84ms Vs。第二个功能仅需 4.32 毫秒。
关于javascript - Math.min 和 Math.max 超出了最大调用堆栈大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42623071/