javascript - Math.min 和 Math.max 超出了最大调用堆栈大小

标签 javascript arrays

我有 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.minMath.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/

相关文章:

javascript - 是否有一个函数可以在javascript中查找具有重复元素的子数组?

JavaScript 表单布局管理器

javascript - 学习 React.js

java - 在确定在二十一点游戏的 java 代码中执行哪个类的方法时存在问题。非常基础,编程新手

c - 如何在没有警告的情况下将 gmp_z 数组传递给函数?

Javascript:抓取数组中特定值之前和之后的值

c# - 如何将 C# 数组传递给 JavaScript 数组

javascript - 显示链接的可点击背景 div 打开两个链接

c++ - 将元素从一个数组复制到另一个 C++

javascript - 使用 dojo 或 javascript 检查输入标签中是否设置了属性集