[英]Maximum call stack size exceeded with Math.min and Math.max
我有 js function 在 2d 數組中查找最小值和最大值,這在小 arrays 上工作正常但是當我傳遞它大數組時它給我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]}))
}
}
Math.min
和Math.max
最有可能崩潰,或者為大數組返回NaN
(~10⁷)
(見@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;
}
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};
}
👆 編輯:刪除了MIN_VALUE
使用(見下面的帖子)。
const arrayMinMax = (arr) =>
arr.reduce(([min, max], val) => [Math.min(min, val), Math.max(max, val)], [
Number.POSITIVE_INFINITY,
Number.NEGATIVE_INFINITY,
]);
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};
}
使用 lodash 庫中的min
和max
函數, https://lodash.com/docs/4.17.15#max
您可以將 arrays 直接傳遞給它們,而不是Math.max
和Math.min
函數,它們可以很好地處理巨大的 arrays 數字。 我有一個類似的問題,並通過 lodash 的函數解決了它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.