2010-05-18 10 views
14

En resumen, esto funciona:Cómo utilizar Math.max, etc., como funciones de orden superior

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

Pero esto no es así:

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

desconcierto puro.

Esto está en Firefox 3.5.9, que supongo que está usando el mozilla standard implementation of reduce, FWIW.

+0

Terminología nitpick: No está tratando de usar Math.max como una función de orden superior, sino para usarla como argumento para una función de orden superior. Usarlo como una función de orden superior significa usarlo con argumentos que son funciones (o usarlo para que devuelva una función). – sepp2k

+0

@ sepp2k Nitpick perfectamente justo. :-) – cemerick

+0

Reduce las especificaciones aquí https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce –

Respuesta

19

Math.max se puede utilizar como una función de orden superior. El problema es .reduce llamará a la función con 4 argumentos:

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

aquí es the_array es una matriz, por lo Math.max devuelve NaN. No creo que haya una manera más simple de descartar los últimos 2 argumentos.

+1

Eso es lo que obtengo por no leer los documentos MDC lo suficientemente cerca. Una idea loca de reducir fn, IMO, pero bueno, ¡es javascript! ;-) Gracias. – cemerick

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