2010-05-18 3 views
14

는,이 작품으로 등 Math.max를 사용하는 방법 :higher-order 함수 한마디로

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

을하지만 그렇지 않은 :

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

순수 당황.

이것은 Firefox 3.5.9에서 FWIW 인 mozilla standard implementation of reduce을 사용하고있는 것으로 추측됩니다.

+0

용어 nitpick : 고차 함수로 Math.max를 사용하려고하는 것이 아니라 상위 함수의 인수로 사용하려고합니다. 고차 함수로 사용하는 것은 함수 인 인수와 함께 사용하거나 함수를 반환하도록 사용하는 것을 의미합니다. – sepp2k

+0

@ sepp2k 완벽하게 공정한 nitpick. :-) – cemerick

+0

사양 줄이기 https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce –

답변

19

Math.max은 고차 함수로 사용할 수 있습니다. 문제는 .reduce 4 개 인수 함수를 호출 할 수 있습니다 :

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

여기 the_array 배열입니다, 그래서 Math.max가 NaN 반환합니다. 마지막 두 가지 주장을 버리는 더 쉬운 방법은 없다고 생각합니다.

+1

MDC 문서를 면밀히 읽지 않기 때문에 얻은 ​​것입니다. 축소 fn의 미친 아이디어, IMO,하지만 이봐, 자바 스크립트! ;-) 감사. – cemerick

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