.Map, .every और .forEach में क्या अंतर है?


118

मुझे हमेशा आश्चर्य होता है कि उनके बीच क्या अंतर था। वे सभी एक ही काम करने लगते हैं ...


6
किसी ने एक jQuery टैग जोड़ा ... विचार करना everyऔर forEachjQuery के तरीके नहीं हैं, मुझे लगता है कि यह संभावना नहीं है कि प्रश्न किसी भी तरह से jQuery से संबंधित है। developer.mozilla.org/en/JavaScript/New_in_JavaScript/1.6
जेम्स एलार्डिस

मुझे लगता है कि इस लिंक का जवाब आपके पास होना चाहिए।
21

क्या मैं यह सोचने में सही हूं कि आप अपनी पिछली टिप्पणी में लिंक में विस्तृत नए मोज़िला विशिष्ट सरणी तरीकों का उल्लेख कर रहे हैं?
जेम्स एलार्डिस

@ नाम - ये मोज़िला विशिष्ट नहीं हैं । मैं वेबकिट और ओपेरा डॉक्स का लिंक भी साझा करूंगा, लेकिन मुझे नहीं पता कि वे मेरे सिर के ऊपर से कहां हैं।
gilly3

@ gilly3 - आह, अच्छी बात है। मेरा मानना ​​है कि वे केवल IE9 में समर्थित हैं, हालांकि नीचे नहीं।
जेम्स एलार्डिस

जवाबों:


224

अंतर वापसी मूल्यों में है।

.map() मूल आइटम पर कुछ कार्रवाई करके बनाई गई वस्तुओं की एक नई सरणी लौटाता है

.every() एक बूलियन लौटाता है - सच है अगर इस सरणी में प्रत्येक तत्व प्रदान किए गए परीक्षण फ़ंक्शन को संतुष्ट करता है। इसके साथ एक महत्वपूर्ण अंतर .every()यह है कि परीक्षण फ़ंक्शन को हमेशा सरणी में प्रत्येक तत्व के लिए नहीं बुलाया जा सकता है। एक बार परीक्षण फ़ंक्शन किसी भी तत्व के लिए गलत हो जाता है, कोई और सरणी तत्व पुनरावृत्त नहीं होते हैं। इसलिए, परीक्षण फ़ंक्शन का आमतौर पर कोई दुष्प्रभाव नहीं होना चाहिए ।

.forEach() कुछ भी नहीं लौटाता है - यह ऐरे में प्रत्येक आइटम के लिए दिए गए एक्शन को करने वाले एरे को पुनरावृत्त करता है।

MDN पर इन और कई अन्य ऐरे पुनरावृति विधियों के बारे में पढ़ें ।


वैकल्पिक रूप से, MDN में उद्धृत किया जा सकता है
JoshWillik

3
@ जोश - मैंने एमडीएन का हवाला दिया। प्रत्येक विधि का नाम एमडीएन में इसके संबंधित दस्तावेज से जुड़ा हुआ है।
gilly3

@ gilly3, मेरी क्षमायाचना, मैं नीले पाठ पर चमक गया>।>
जोशिलिक

.forEach () रिटर्न कुछ भी गलत नहीं है, शायद यह 2012 में नहीं था, लेकिन 2015 में क्रोम में कम से कम, इस arr2 = ['sue', 'joe', 'ben', 'guy', 'tom', 'jon का प्रयास करें ']; b = arr2.forEach (function (el, indx) {कंसोल.लॉग (indx + ':' + el);}); console.log (ख);
जेसन

1
@EugeneMercer "मूल आइटम" से मेरा मतलब सरणी के प्रत्येक तत्व के मूल मूल्य से है।
गिली 3

88

gilly3 का जवाब बहुत अच्छा है। मैं बस "तत्वों के माध्यम से" कार्यों के अन्य प्रकारों के बारे में थोड़ी जानकारी जोड़ना चाहता था।

  • .every() (पहली बार जब पुनरावृत्तिकर्ता गलत या कुछ गलत लिखता है तो लूप बंद कर देता है)
  • .some() (पहली बार जब पुनरावृत्ति सही या कुछ सत्य हो जाता है तो लूप बंद हो जाता है)
  • .filter() (उन तत्वों को शामिल करता है, जिनमें फिल्टर फ़ंक्शन सही होता है और जहां यह गलत होता है, उन्हें छोड़ते हुए एक नया सरणी बनाता है)
  • .map() (पुनरावृति फ़ंक्शन द्वारा दिए गए मानों से एक नया सरणी बनाता है)
  • .reduce() (पुनरावृत्ति को दोहराकर, पिछले मानों में पास करके एक मान बनाता है; विवरण के लिए युक्ति देखें; एक सरणी की सामग्री और कई अन्य चीजों के लिए उपयोगी है)
  • .reduceRight() (जैसे घटते हैं, लेकिन आरोही क्रम के बजाय अवरोही में काम करते हैं)

श्रेय: TJCrowder जावास्क्रिप्ट में एक सरणी पर प्रत्येक के लिए?


मुझसे १०० लाइक मिले!
शमीम

6

उपरोक्त महान उत्तरों के लिए एक और विचार जंजीर है। ForEach () के साथ आप चेन नहीं कर सकते, लेकिन मैप () के साथ, आप कर सकते हैं।

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

var arrayNumbers = [3,1,2,4,5];

arrayNumbers.map(function(i) {
    return i * 2
}).sort();

.forEach () के साथ, आप .sort () नहीं कर सकते, आपको एक त्रुटि मिलेगी।


0

के लिए Ramda , के बीच का अंतर R.map()और R.forEach()है:

  1. R.forEach()मूल सरणी R.map()लौटाता है जबकि एक फ़नकार लौटाता है
  2. R.forEach()केवल सरणी पर काम R.map()कर सकते हैं, लेकिन एक ऑब्जेक्ट पर भी काम कर सकते हैं (यानी ऑब्जेक्ट की कुंजी / मान जोड़े को एक सरणी की तरह माना जाता है)

प्रश्न जावास्क्रिप्ट भाषा से संबंधित है। रामदा महान जबकि एक पूरी तरह से अलग विषय और एक पुस्तकालय है।
SeaWarrior404
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.