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

时间:2017-03-06 10:23:04

标签: javascript arrays

我有js函数来查找2d数组中的最小值和最大值,这在小数组上运行正常但是当我传递大数组时它会给我 @Override protected void onResume() { super.onResume(); if (mGoogleApiClient == null) { mGoogleApiClient = new GoogleApiClient.Builder(this) .addApi(Drive.API) .setAccountName("yourmaild@gmail.com") .addScope(Drive.SCOPE_FILE) .addScope(Drive.SCOPE_APPFOLDER) // required for App Folder sample .addConnectionCallbacks(this) .addOnConnectionFailedListener(this) .build(); } mGoogleApiClient.connect(); }

  

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

我使用的是最新版本的Chrome。

range error

3 个答案:

答案 0 :(得分:3)

Math.minMath.max

list(map(str,sorted(map(int,heights.rstrip('-').split())))) Math.min都是递归操作,很可能在大数组(〜10⁷)时崩溃。

相反,您可以像这样使用旧的javascript循环:

(第二个功能要快得多)

Math.max

function getMax(arr) {
    return arr.reduce((max, v) => max >= v ? max : v, -Infinity);
}

*经过1,000,000项测试:
第一功能运行时间(在我的计算机上)为15.84msVs。第二功能只有4.32毫秒。

答案 1 :(得分:1)

请改为尝试:

function minMax2DArray(arr, idx) {
  var max = Number.MIN_VALUE,
    min = Number.MAX_VALUE;
  arr.forEach(function(e) {
    if (max < e[idx]) {
      max = e[idx];
    }
    if (min > e[idx]) {
      min = e[idx];
    }
  });
  return {max: max, min: min};
}

答案 2 :(得分:1)

bjornl的回答有一个问题。根据{{​​3}}

  

MIN_VALUE属性是最接近0的数字,而不是JavaScript可以表示的最负数。

更新的代码:

function minMax2DArray(arr, idx) {
    var max = -Number.MAX_VALUE,
        min = Number.MAX_VALUE;
    arr.forEach(function(e) {
        if (max < e[idx]) {
            max = e[idx];
        }
        if (min > e[idx]) {
           min = e[idx];
       }
    });
    return {max: max, min: min};
}