स्रोत
दोनों mapऔर reduceसरणी और एक समारोह आप को परिभाषित इनपुट के रूप में की है। वे किसी तरह से पूरक हैं: mapकई तत्वों की एक सरणी के लिए एक एकल तत्व वापस नहीं कर सकते हैं, जबकि reduceहमेशा संचायक को आप अंततः बदल देंगे।
map
mapतत्वों का उपयोग करने के लिए, और प्रत्येक तत्व के लिए आप अपने इच्छित तत्व को वापस करते हैं।
उदाहरण के लिए, यदि आपके पास संख्या है और उनके वर्ग प्राप्त करना चाहते हैं, तो आप यह कर सकते हैं:
const square = x => x * x
console.log([1, 2, 3, 4, 5].map(square))
reduce
इनपुट के रूप में एक सरणी का उपयोग करके, आप कॉलबैक फ़ंक्शन (पहला तर्क) के आधार पर एक एकल तत्व (मान लें कि कोई ऑब्जेक्ट, या संख्या, या कोई अन्य सरणी) प्राप्त कर सकते हैं, जो accumulatorऔर current_elementपैरामीटर प्राप्त करता है:
const numbers = [1, 2, 3, 4, 5]
console.log(numbers.reduce(function (acc, current) {
return acc + current
}, 0))
console.log(numbers.reduce(function (acc, current) {
return acc * current
}, 1))
जब आप दोनों के साथ एक ही काम कर सकते हैं, तो आपको किसे चुनना चाहिए? कोड कैसे दिखता है, इसकी कल्पना करने की कोशिश करें। दिए गए उदाहरण के लिए, आप उपयोग किए गए वर्गों की गणना कर सकते हैं, जैसे आपने बताया था reduce:
[1, 2, 3, 4, 5].reduce(function (acc, current) {
acc.push(current*current);
return acc;
}, [])
[1, 2, 3, 4, 5].map(x => x * x)
अब, इन्हें देखते हुए, जाहिर है कि दूसरा कार्यान्वयन बेहतर है और यह छोटा है। आमतौर पर आप क्लीनर समाधान चुनते हैं, जो इस मामले में है map। बेशक, आप इसे कर सकते हैं reduce, लेकिन संक्षेप में, सोचें कि कौन सा छोटा होगा और आखिरकार यह बेहतर होगा।