2012-08-01 10 views
7

दस्तावेज के अनुसार underscore-reduce मुझे तीन पैरामीटर पास करना चाहिए।अंडरस्कोर कम करें, मेमो

उदाहरण के लिए:

var m = _.reduce([1,2,3], function (memo, num) {return (num * 2) +memo }, 0); 
m; // 12 as expected 

अगर मैं सिर्फ पहले दो पैरामीटर पास करने की कोशिश मैं एक अलग मूल्य मिलता है। क्यूं कर?

var m = _.reduce([1,2,3], function (memo, num) {return (num * 2) +memo }); 
m; // 11 ..why? 

उत्तर

6

केवल दो मापदंडों के साथ reduce में पारित कर दिया, यह पहली समारोह कॉल करने के लिए तर्क के रूप में पहले और दूसरे सरणी आइटम का उपयोग करेगा।

function addDouble(memo, num) {return (num * 2) +memo } 

[1,2,3].reduce(addDouble, 0) 
// is equivalent to 
addDouble(addDouble(addDouble(0, 1), 2), 3) 

[1,2,3].reduce(addDouble) 
// is equivalent to 
addDouble(addDouble(1, 2), 3) 

आमतौर पर आप प्रारंभ मूल्य पारित करेंगे, लेकिन कई आपरेशनों एक ही परिणाम है जब उनके identity element बिना शुरू। उदाहरण के लिए:

function add(a, b) { return a+b; } 
function double(a) { return 2*a; } 

[1,2,3].map(double).reduce(add) == [1,2,3].map(double).reduce(add, 0) 

native reduce() के लिए दस्तावेज़ भी देखें।

0

यदि आप केवल दो पैरामीटर पास करते हैं, तो प्रारंभिक ज्ञापन सरणी का पहला मान लेगा, और बाकी के माध्यम से जाएगा। 11 = 1 + (2 * 2) + (3 * 3)। इसलिए। और यदि आप तीन पैरामीटर पास करते हैं, तो ज्ञापन प्रारंभिक मेनो के रूप में तीसरा पैरामीटर लेगा और सरणी के प्रत्येक आइटम के माध्यम से जाएगा।

संबंधित मुद्दे