要获得数字数组中的最小数字,我使用:
var smallestNumber = Math.min.apply(null, arrayOfNumbers.map(function(x) { return x; }));
但如果其中一个数字是NaN,则smallestNumber返回NaN。 max运算符也是如此。 (我可能有Infinity,但我不确定它是否会被退回)
如何跳过所有NaN并返回最小的数字?
答案 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调用本身中使用匿名函数。)