当前位置: 首页 > 知识库问答 >
问题:

使用数学.min 和数学时,最大调用堆栈大小已超出.max

唐利
2023-03-14

我有js函数来寻找2d数组中的最小值和最大值,它在小数组中工作正常,但是当我把它传递给大数组时,它给我< code>range error:

超出了最大调用堆栈大小。

我用的是最新版本的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]}))
  }
}

共有1个答案

寇夜洛
2023-03-14

Math.minMath.max最有可能崩溃,或者返回NaN用于大数组(~10)(参见@DavidWaters

相反,您可以使用旧的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,而第二个函数只有4.32ms。
 类似资料:
  • 问题内容: 当我运行我的代码时,Node.js引发由过多的递归调用引起的异常。我试图将Node.js堆栈大小增加,但是Node.js崩溃而没有任何错误消息。当我不使用sudo再次运行此命令时,Node.js将输出。是否有可能在不删除递归调用的情况下解决此问题? 问题答案: 您应该将递归函数调用包装到 , 要么 函数使node.js有机会清除堆栈。如果您不这样做,并且有很多循环没有任何 真正的 异步

  • 问题内容: 我想这意味着有一个循环引用,但是对于我的一生,我无法猜测如何解决它。 有人有主意吗? http://plnkr.co/edit/aNcBcU?p=预览 检查Chrome中的调试控制台(例如),您将看到错误。冒犯的行是 通过以下方式在控制器上对scope.map进行“ $ watched” 问题答案: 这是因为您要比较对象是否相等,而不是参考。将您的声明更改为此:

  • 如果用户未登录,我尝试将用户重定向到“TrapPage”。 这是我的代码: 当我将函数requireAuth放在onEnter上时,控制台给我一个错误: 我是一个反应迟钝的人,请耐心点:) 我的代码有什么问题?

  • 问题内容: 我有一台服务器,可能导致以下输出死亡: 但是,如果没有堆栈转储或跟踪,就无法确定这是无限递归还是只是链太大而已,更不用说问题函数在哪里了。 使用该选项运行Node 不仅使我的测试运行缓慢(正如人们期望的那样),而且没有重现该问题。 有人有任何解决方案或提示来深入了解此问题吗? 问题答案: 看来目前的答案是:站稳脚步,等待Node.js更新到新的V8版本,或者使用此Chromium项目错

  • 当我运行代码时,Node。js抛出由过多递归调用引起的异常。我试图增加Node。js-stack-size-by,但是node。js崩溃,没有任何错误消息。当我在没有sudo的情况下再次运行时,请选择Node。js打印。有没有可能在不删除递归调用的情况下解决这个问题?

  • 在我的插座里。io应用程序,我正在尝试将房间中的一组用户发送到客户端,以便创建一个显示房间中所有用户的元素。文档中说,您可以使用以下代码返回给定命名空间和文件室中的所有套接字实例: 但是,它涉及到,这是我不太熟悉的。我只是把代码块放在一个函数中,我不确定这是最好的方法。 当我尝试运行此操作时,控制台中出现以下错误: 我试着对此做了一些研究,发现了这个答案,建议将代码包装在块中。我已经做到了: 但是