2010-05-18 51 views
14

总之,这个工程:如何使用Math.max等作为高阶函数

[1, 2, 3].reduce(function (a, b) { return Math.max(a, b); }); 
=> 3 

但这并不:

[1, 2, 3].reduce(Math.max); 
=> NaN 

纯困惑。

这是在Firefox 3.5.9,我认为这是使用mozilla standard implementation of reduce,FWIW。

+0

术语nitpick:您并不是试图将Math.max用作高阶函数,而是将其用作高阶函数的参数。将它用作高阶函数意味着将它用作函数的参数(或者使用它来返回函数)。 – sepp2k 2010-05-18 11:50:34

+0

@ sepp2k完美公平挑剔。 :-) – cemerick 2010-05-18 13:35:32

+0

减少规格在这里https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce – 2012-09-27 07:45:22

回答

19

Math.max可以用作高阶函数。问题是.reduce会调用该函数与4个参数:

Math.max(accumulator, value, index, the_array) 

这里是the_array是一个数组,所以Math.max返回NaN。我不认为有更简单的方法可以放弃最后2个参数。

+1

这就是我没有仔细阅读MDC文档所得到的结果。疯狂的想法减少FN,国际海事组织,但嘿,这是JavaScript! ;-) 谢谢。 – cemerick 2010-05-18 13:35:04

0
Math.max.apply(Math, [1, 2, 3]); 
//3