如何在使用Math.min.apply时跳过NaN?

时间:2013-10-09 18:29:36

标签: javascript

要获得数字数组中的最小数字,我使用:

var smallestNumber = Math.min.apply(null, arrayOfNumbers.map(function(x) { return x; }));

但如果其中一个数字是NaN,则smallestNumber返回NaN。 max运算符也是如此。 (我可能有Infinity,但我不确定它是否会被退回)

如何跳过所有NaN并返回最小的数字?

2 个答案:

答案 0 :(得分:4)

过滤掉NaN条目:

var smallest = Math.min.apply(null, arrayOfNumbers.filter(function(n) { return !isNaN(n); }));

答案 1 :(得分:0)

根据zzzzBov的想法,您也可以使用Array.reduce执行此操作。这将允许您跳过将从过滤器创建的中间数组:

var minReduce = function (a, b) { return (isNaN(b) || b > a) ? a : b };
var smallest = arrayOfNumbers.reduce(minReduce, Number.MAX_VALUE);

(我只是将函数分别存储在变量中以使其在答案中更具可读性;您可以在reduce调用本身中使用匿名函数。)