2017-03-06 166 views
1

我有JS功能找到分钟和二维数组最大值这对小数组工作正常,但是当我将它传递大数组它给我range error最大调用堆栈大小超出与Math.min和Math.max

超过最大调用堆栈大小。

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

Function.prototype.apply的只能接收有限长度的数组作为它的第二个参数。您应该手动找到最小值和最大值 – Weedoze

+0

至少,您可以优化您的函数并删除同一阵列上多余的Array.prototype.map()函数调用 – RomanPerekhrest

+3

更准确地说:每个参数占用堆栈上的空间并传递太多任何函数的参数都会导致堆栈溢出。 – Ryan

回答

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}; 
} 
+0

谢谢:)它有所帮助。 – user889030

+0

很高兴它有所作为:) – bjornl

1

有一个在bjornl的回答一个问题。根据https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MIN_VALUE

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}; 
} 
相关问题