我想创建一个从数组中返回最大数字的函数,但它会一直返回NaN
。
如何阻止NaN并返回想要的结果?
var thenum = [5,3,678,213];
function max(num){
console.log(Math.max(num));
}
max(thenum);
答案 0 :(得分:4)
发生这种情况的原因是Math.max
计算其参数的最大值。并且看作第一个参数是一个数组,它返回NaN。
您现在有 2个选项(取决于您的环境或偏好):
您可以将数组扩展到函数的参数。
const thenum = [5, 3, 678, 213];
console.log(Math.max(...thenum));
here是这个例子的jsFiddle。
或者,您可以使用apply
方法调用它,该方法允许您调用函数并在数组中发送它们的参数。
你想要的是应用Math.max
函数,如下所示:
var thenum = [5, 3, 678, 213];
function max(num){
return Math.max.apply(null, num);
}
console.log(max(thenum));
您也可以将其作为方法并将其附加到Array原型。这样您就可以更轻松,更清洁地使用它。像这样:
Array.prototype.max = function () {
return Math.max.apply(null, this);
};
console.log([5, 3, 678, 213].max());
更多关于the apply method。
而且here是两个
的jsFiddle答案 1 :(得分:1)
试试这个。 Math.max.apply(Math,thenum)
var thenum = [5,3,678,213];
function max(num){
console.log(Math.max.apply(Math,thenum));
}
结果:678
答案 2 :(得分:1)
Math.max()方法不允许您传入数组。因此对于Array,您必须使用Function.prototype.apply(),例如
Math.max.apply(null, Array);
参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply
答案 3 :(得分:0)
var p = [35,2,65,7,8,9,12,121,33,99];
Array.prototype.max = function() {
return Math.max.apply(null, this);
};
Array.prototype.min = function() {
return Math.min.apply(null, this);
};
alert("Max value is: "+p.max()+"\nMin value is: "+ p.min());
<强> demo 强>