我有一个简单的JavaScript数组对象包含几个数字。
[267, 306, 108]
有没有一个函数能找到这个数组中最大的数?
我有一个简单的JavaScript数组对象包含几个数字。
[267, 306, 108]
有没有一个函数能找到这个数组中最大的数?
当前回答
应该很简单:
var countArray = [1,2,3,4,5,1,3,51,35,1,357,2,34,1,3,5,6];
var highestCount = 0;
for(var i=0; i<=countArray.length; i++){
if(countArray[i]>=highestCount){
highestCount = countArray[i]
}
}
console.log("Highest Count is " + highestCount);
其他回答
辞职拯救:
Array.max = function( array ){
return Math.max.apply( Math, array );
};
警告:由于在某些虚拟机上参数的最大数量低至65535,如果您不确定数组有那么小,请使用for循环。
你可以使用apply函数,调用Math.max:
var array = [267, 306, 108];
var largest = Math.max.apply(Math, array); // 306
它是如何工作的?
apply函数用于调用具有给定上下文和参数的另一个函数,以数组形式提供。min和max函数可以接受任意数量的输入参数:Math。Max (val1, val2,…valN)
如果我们调用:
Math.min.apply(Math, [1, 2, 3, 4]);
apply函数将执行:
Math.min(1, 2, 3, 4);
注意,第一个参数context对于这些函数并不重要,因为它们是静态的。不管传递什么作为上下文,它们都将工作。
要找到数组中最大的数字,您只需要使用Math.max(…arrayName);。它是这样工作的:
let myArr = [1, 2, 3, 4, 5, 6];
console.log(Math.max(...myArr));
要了解更多关于Math.max的信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/max
Use:
var arr = [1, 2, 3, 4];
var largest = arr.reduce(function(x,y) {
return (x > y) ? x : y;
});
console.log(largest);
几乎所有的答案都使用Math.max.apply(),这很好,但它有局限性。
函数参数被放置在堆栈上,这有一个缺点——限制。因此,如果你的数组大于限制,它将失败与RangeError:最大调用堆栈大小超过。
为了找到一个调用堆栈大小,我使用了下面的代码:
var ar = [];
for (var i = 1; i < 100*99999; i++) {
ar.push(1);
try {
var max = Math.max.apply(Math, ar);
} catch(e) {
console.log('Limit reached: '+i+' error is: '+e);
break;
}
}
它在我的机器上的Firefox上是最大的——591519。这意味着如果数组包含超过591519个项,Math.max.apply()将导致RangeError。
这个问题的最佳解决方案是迭代方法(来源:https://developer.mozilla.org/):)
max = -Infinity, min = +Infinity;
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] > max)
max = numbers[i];
if (numbers[i] < min)
min = numbers[i];
}
我在我的博客上写过这个问题。