2013-02-20 39 views
6

मैंने अभी जावास्क्रिप्ट अंडरस्कोर लाइब्रेरी को गहराई से खोजना शुरू कर दिया है और बस मुझे लगता है कि _.reduce() (जिसे inject और foldl भी कहा जाता है) स्पष्ट करना चाहते हैं। मेरा सवाल है: क्या नीचे सही है?Underscore _.reduce स्पष्टीकरण?

जब _.reduce([1, 2, 3, 4, 5], function(memo, num) { return memo + num; }, 5); कहा जाता है, निम्न होता है: पर

  • memo शुरू होता है 5
  • memo + list[0] = memo = 6
  • memo + list[1] = memo = 8
  • memo + list[2] = memo = 11
  • memo + list[3] = memo = 15
  • memo + list[4] = memo = 20

और यही कारण है दौड़ा फ़ंक्शन 20 है। क्या वह सही है? और इसलिए _.reduceRight() विपरीत है और memo + list[ /* last element in array */ ] से शुरू होता है?

धन्यवाद।

सम्मान।

उत्तर

11

हाँ, यह सही है। reduce कॉलबैक का पहला तर्क अंतिम पुनरावृत्ति (या पहले पुनरावृत्ति में बीज) से लौटाए गए मान का प्रतिनिधित्व करता है।

कॉलबैक के लिए दूसरा तर्क ऐरे के वर्तमान पुनरावृत्ति का मूल्य है।

इस प्रकार, पहला तर्क आप जिस भी परिणाम तक पहुंचने का प्रयास कर रहे हैं उसका एक संग्रहक है। अंतिम मान _.reduce फ़ंक्शन से वापस लौटाया जाता है जब सभी पुनरावृत्तियों को पूरा किया जाता है।

+0

धन्यवाद, बहुत कुछ; मैं बस चाहता था। आपका दिन शुभ हो। – raf

+0

आपका स्वागत है। –