0

为了获得数字数组中的最小数字,我使用这个:

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

但如果其中一个数字是 NaN,则 minimumNumber 返回 NaN。max 运算符也会发生同样的事情。(我可能有 Infinity 但我不确定它是否会被退回)

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

4

2 回答 2

5

过滤掉NaN条目:

var smallest = Math.min.apply(null, arrayOfNumbers.filter(function(n) { return !isNaN(n); }));
于 2013-10-09T18:31:20.940 回答
2

按照 zzzzBov 的想法,您也可以使用Array.reduce. 这将允许您跳过将从过滤器创建的中间数组:

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

(我只将函数单独存储在一个变量中,以使其在答案中更具可读性;您可以在 reduce 调用本身中自由使用匿名函数。)

于 2013-10-09T18:41:28.127 回答