javascript - Applicative functors in Underscore/Lo-Dash chaining - how to map inside a map? -
मेरे पास एक नेस्टेड ऑब्जेक्ट है:
var itemsQuantities = [{आइडेंटिफ़ायर: कुछ नाम: 'मात्रा: 1', मात्रा: [{नाम: 'मात्रा 1', राशि: 4}, {नाम: 'मात्रा 2', राशि: 1}, {नाम: 'मात्रा 3', राशि: 3}]}, {आइडेंटिफ़ायर: 'कुछ कुछ के साथ- Quantities2', मात्रा: [{नाम: 'मात्रा 1', राशि: 3}, {नाम: 'मात्रा 2', राशि: 2}, {नाम: 'मात्रा 3', राशि: 5}]}]; समस्या : मैं [7, 3, 8] प्राप्त करने के लिए सभी 'मात्रा' वस्तुओं को एक साथ गुना चाहता हूं यह राशि क्षेत्र के क्षैतिज रकम के रूप में है। मैं अपने मौजूदा समाधान बिना सिस्टम चेनिंग इस तरह से है: var राशि ससुराइनी चाइना = _.reduce (_। नक्शा (आइटम) विवेक, कार्य (वस्तु) {वापसी _.प्लिक (आइटम। प्रश्नोत्तर, 'राशि');}), फ़ंक्शन (प्रचाक्यू, अगली क्यू) {वापसी [prevQ [0] + अगलीQ [0], पीईटीक्यू [1] + अगली क्यू [1], प्रचेक्यू [2] + अगली क्यू [2]];}, [0, 0, 0]); इस प्रकार अब तक, लो-डैश के _ आंशिक राइट का उपयोग करके, सबसे साफ समाधान, मैंने प्राप्त किया है: var राशिस्पर्श = _.चैन (आइटमों के साथ-साथ) .प्लक ('मात्रा') .मैप (फ़ंक्शन (ए) {रिटर्न _पार्टीलाइट (_। चिपक, 'राशि') (ए);}) .राइड (फ़ंक्शन (पी, सी) {रिटर्न [पी [0] + सी [0], पी [1] + सी [1], पी [2] + सी [2]];})। मूल्य (); .map कॉल के साथ तीसरी पंक्ति पर, उस रेखा को और अधिक सरल बनाने का कोई तरीका है? मैं क्यों .map (_ आंशिक राइट (_। चिपक, 'राशि') का उपयोग नहीं कर सकता) ? _। आंशिक राइट को फ़ंक्शंस वापस करना माना जाता है जो एक पैरामीटर को फेंकने की अपेक्षा करता है, और जैसा कि आप देख सकते हैं, यह ऊपर विधि श्रृंखला में काम करता है, लेकिन एक स्पष्ट बंद फ़ंक्शन के साथ। क्या ऐसा करने के लिए कोई और रास्ता भी कम है? JSBin:
< P> क्यों मैं .map (_ आंशिक राइट (_। चिपक, 'राशि') का उपयोग नहीं कर सकता) ? _। आंशिक राइट को ऐसे फ़ंक्शन को वापस करना माना जाता है जो pluck के लिए एक पैरामीटर की अपेक्षा करता है। दुर्भाग्य से बिल्कुल नहीं, partialRight < / कोड> उस उद्देश्य के लिए टूट गया है आंशिक तर्कों को उन से जोड़ दिया जाता है जो नए फ़ंक्शन को प्रदान किए जाते हैं स्रोत कोड में एक नज़र यह पुष्टि करता है कि नया फ़ंक्शन केवल एक पैरामीटर की अपेक्षा नहीं करता है, लेकिन पैरामीटर के किसी भी संख्या में और आंशिक रूप से उनको दिया जाता है। और जब से नक्शा आइटम, सूचकांक और संग्रह के साथ कॉलबैक को कॉल करता है, उनको pluck : _ .मैप ([[राशि: 3] [], _ पर्टीलाइट (_। चिपक, 'राशि')) वास्तव में [_.pluck ([[राशि: 3}], 0, [[[ राशि: 3}]], 'राशि')] / / जो "0" संपत्ति काट लेंगे, न कि "राशि": [[अपरिभाषित]] यह केवल काम करता है स्पष्ट बंद फ़ंक्शन के साथ
[यह वास्तव में बंद नहीं है क्योंकि इसमें मुफ्त चर नहीं है।] हाँ, यह फ़ंक्शन कार्य करता है क्योंकि आप स्पष्ट रूप से आंशिक रूप से लागू फ़ंक्शन के लिए केवल एक तर्क पारित करते हैं। वास्तव में आपको वास्तव में इसे और अधिक आंशिक रूप से लागू करने की आवश्यकता नहीं है, लेकिन इसका उपयोग केवल
.map (फ़ंक्शन (a) {return _.pluck (a, 'राशि');}) कर सकते हैं क्या कोई और भी संक्षिप्त तरीका बनाने का कोई तरीका है?
फ़ंक्शन अभिव्यक्ति से बचने के लिए, आप तर्क संख्या को सीमित करने के लिए उपयोग कर सकते हैं : <प्री> .मैप (_ बनाएँ कॉलबैक (_। आंशिक राइट (_। चिपटना, 'राशि'), रिक्त, 1)) यह निश्चित नहीं है कि क्या यह किसी भी बेहतर है, हालांकि।
Comments
Post a Comment