2010-05-18 5 views
14

संक्षेप में, यह काम करता है:Math.max, आदि का उपयोग कैसे करें के रूप में उच्च क्रम कार्यों

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

लेकिन यह नहीं करता है:

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

शुद्ध पहेली।

यह फ़ायरफ़ॉक्स 3.5.9 में है, जो मुझे लगता है कि mozilla standard implementation of reduce, FWIW का उपयोग कर रहा है।

+0

शब्दावली nitpick: एक उच्च क्रम कार्य करने के लिए एक तर्क के रूप में उपयोग करने के लिए आप एक उच्च क्रम समारोह के रूप में Math.max उपयोग करने के लिए कोशिश नहीं कर रहे हैं, लेकिन। इसे उच्च ऑर्डर फ़ंक्शन के रूप में उपयोग करने का अर्थ उन तर्कों के साथ करना होगा जो कार्य हैं (या इसका उपयोग करने के लिए ताकि यह फ़ंक्शन लौटाए)। – sepp2k

+0

@ sepp2k पूरी तरह से उचित नाइटपिक। :-) – cemerick

+0

spec कम करें https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce –

उत्तर

19

Math.max उच्च-आदेश फ़ंक्शन के रूप में उपयोग किया जा सकता है। इसलिए Math.max रिटर्न NaN

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

यहाँ the_array एक सरणी है,: समस्या .reduce 4 तर्क के साथ समारोह कॉल करेंगे है। मुझे नहीं लगता कि पिछले 2 तर्कों को त्यागने का एक आसान तरीका है।

+1

मुझे एमडीसी दस्तावेज़ों को बारीकी से पर्याप्त रूप से पढ़ने के लिए मिलता है। एफएन, आईएमओ को कम करने का पागल विचार, लेकिन हे, यह जावास्क्रिप्ट है! ;-) धन्यवाद। – cemerick

0
Math.max.apply(Math, [1, 2, 3]); 
//3 
संबंधित मुद्दे