ऐरे तरीके

आपके पास कीमतों की एक सूची है और आप दूसरी सूची चाहते हैं जिसमें प्रत्येक पर कर जोड़ा गया हो। आप एक for लूप लिख सकते हैं जो ऐरे को पार करता है, योग करता है, और प्रत्येक परिणाम को एक नई ऐरे में धकेलता है। यह काम करता है, लेकिन एक छोटे विचार के लिए बहुत सारी वायरिंग है: हर आइटम लें और इसे बदलें। ऐरे तरीके बिल्कुल इस तरह के काम के लिए बनाए गए उपकरण हैं। वे आपको लूप को विस्तार से बताए बिना कहने देते हैं कि एक सूची के साथ क्या करना है, और यह अध्याय वे कवर करता है जिन्हें आप रोज़ पहुंचेंगे। वे सीधे ऐरे और फ़ंक्शन पर बनाते हैं, इसलिए दोनों को पास रखें।
map: हर आइटम को बदलें
map एक विधि है: एक फ़ंक्शन जो एक ऐरे से संबंधित है और इस पर काम करता है। map एक नई ऐरे बनाता है जो हर आइटम को एक छोटे फ़ंक्शन के माध्यम से चलाता है जो आप इसे देते हैं, और परिणाम एकत्र करते हैं। आप इसे वह फ़ंक्शन पास करते हैं, और यह एक समय में हर आइटम को हाथ देता है।
मान लीजिए आपके पास कुछ कीमतें हैं और आप चाहते हैं कि हर एक दोगुनी हो:
const prices = [2, 4, 6];
const doubled = prices.map((price) => price * 2);
console.log(doubled); // [4, 8, 12](price) => price * 2 भाग एक तीर फ़ंक्शन है: एक छोटा फ़ंक्शन जो एक आइटम (price) लेता है और यह रिटर्न करता है कि यह क्या होना चाहिए (price * 2)। map इसे एक बार प्रति आइटम कॉल करता है और हर उत्तर को नई ऐरे में एक ही क्रम में रखता है।
map एक सूची लेता है और आपको समान लंबाई की एक नई सूची देता है, हर आइटम अपने छोटे फ़ंक्शन के माध्यम से चलाया जाता है। तीर फ़ंक्शन कहता है कि प्रत्येक आइटम क्या बन जाता है, और map इसे क्रम में सभी के लिए करता है। इसे हर बार पहुंचें जब आप अपने आप को केवल दूसरी सूची बनाने के लिए एक लूप लिखते हुए पकड़ें। filter: आइटम रखें जो पास हों
जहाँ map हर आइटम को बदलता है, filter केवल कुछ को रखता है। आप इसे एक फ़ंक्शन देते हैं जो हर आइटम के लिए हाँ या नहीं का जवाब देता है, और filter केवल वे आइटम जो हाँ पाए गए से एक नई ऐरे बनाता है।
const scores = [40, 75, 90, 55, 88];
const passing = scores.filter((score) => score >= 60);
console.log(passing); // [75, 90, 88]फ़ंक्शन (score) => score >= 60 हर स्कोर के लिए true या false रिटर्न करता है। filter उन्हें रखता है जहाँ यह true है और बाकी को छोड़ देता है। नई ऐरे मूल से छोटी हो सकती है, और यह कभी भी क्रम को नहीं बदलता है।
filter उन आइटम को रखता है जो एक परीक्षण पास करते हैं और बाकी को छोड़ देता है, इसलिए नई ऐरे अक्सर छोटी होती है। आपका फ़ंक्शन हर आइटम के लिए हाँ या नहीं का जवाब देता है, और केवल हाँ आते हैं। यह कभी भी कुछ को पुनः क्रम में नहीं रखता है, इसलिए जो जीवित रहता है वह उसी क्रम में रहता है जिसमें यह शुरू हुआ था। reduce: इसे एक मान तक पकाएं
map और filter दोनों आपको एक ऐरे वापस देते हैं। reduce वह है जो एक ऐरे को एक एकल मान तक संक्षिप्त करता है: एक कुल, एक अधिकतम, एक जुड़ी हुई स्ट्रिंग। यह दूसरों की तुलना में लोगों को अधिक चिंता में डालता है, इसलिए धीरे-धीरे जाने के लायक है।
reduce ऐरे को चलाता है जबकि इसके साथ एक चलता हुआ परिणाम ले जाता है। हर आइटम पर यह पूछता है: अब तक का परिणाम दिया, और यह आइटम, नया परिणाम क्या है?
const prices = [10, 20, 30];
const total = prices.reduce((sum, price) => sum + price, 0);
console.log(total); // 60फ़ंक्शन को दो चीजें मिलती हैं: sum, अब तक का चलता हुआ कुल, और price, वर्तमान आइटम। यह sum + price रिटर्न करता है, जो अगले आइटम के लिए नया चलता हुआ कुल बन जाता है। अंत में 0 यह है जहाँ कुल शुरू होता है। तो यह 0 + 10 जाता है, फिर 10 + 20, फिर 30 + 30, 60 पर उतरता है।
reduce सूची के माध्यम से एक चलता हुआ परिणाम ले जाता है और हर आइटम पर इसे अपडेट करता है। कॉलबैक को अब तक का परिणाम प्लस वर्तमान आइटम मिलता है, और नया परिणाम रिटर्न करता है। अंतिम तर्क यह है जहाँ आप शुरू करते हैं, आमतौर पर कुल के लिए 0, और जब मैंने इसे जोर से पढ़ा तो यह मेरे लिए क्लिक हो गया। find, some, और every
ये तीन filter के करीबी रिश्तेदार हैं: वे ऐरे पर एक परीक्षण चलाते हैं, लेकिन एक नई ऐरे के बजाय वे एक संकीर्ण सवाल का जवाब देते हैं।
find आपको परीक्षण पास करने वाली पहली आइटम देता है, न कि सभी की एक सूची। some और every पूरी ऐरे के बारे में सत्य-या-असत्य प्रश्नों के उत्तर देते हैं।
const scores = [40, 75, 90, 55];
const firstPass = scores.find((score) => score >= 60);
console.log(firstPass); // 75
const anyPass = scores.some((score) => score >= 60);
console.log(anyPass); // true
const allPass = scores.every((score) => score >= 60);
console.log(allPass); // falsefind पहली मिलाई गई आइटम रिटर्न करता है (75)। some पूछता है "क्या कोई आइटम पास हुआ?" और true रिटर्न करता है क्योंकि कम से कम एक ने। every पूछता है "क्या वे सभी पास हुए?" और false रिटर्न करता है क्योंकि 40 और 55 नहीं हुए।
find आपको पहली आइटम देता है जो पास हो, पूरी सूची नहीं। some पूछता है "क्या कोई पास हुआ?" और every पूछता है "क्या सभी पास हुए?", और दोनों true या false के साथ उत्तर देते हैं। जब आप एक आइटम या एक हाँ-या-नहीं उत्तर चाहते हैं, फ़िल्टर की गई ऐरे नहीं तो इनका उपयोग करें। चेनिंग और पठनीय रहना
ऊपर के तरीकों में एक डिजाइन है जो एक बार जब आप उन्हें संयोजित करते हैं तो भुगतान करता है: प्रत्येक एक नया मान देता है और मूल ऐरे को अकेला छोड़ देता है।
map, filter, और बाकी सब कभी भी आप जिस ऐरे के साथ शुरू करते हैं उसे नहीं बदलते। वे आपको एक नई ऐरे (या एक मान) देते हैं और मूल को अकेला रखते हैं।
const prices = [10, 20, 30];
const doubled = prices.map((price) => price * 2);
console.log(doubled); // [20, 40, 60]
console.log(prices); // [10, 20, 30]क्योंकि map और filter दोनों एक ऐरे वापस देते हैं, आप उन्हें पंक्तिबद्ध कर सकते हैं: पहले फ़िल्टर करें, फिर बचे हुओं को मैप करें।
const prices = [10, 20, 30, 40];
const bigDoubled = prices.filter((price) => price >= 20).map((price) => price * 2);
console.log(bigDoubled); // [40, 60, 80]filter और map दोनों ऐरे रिटर्न करते हैं, आप उन्हें चेन कर सकते हैं: पहले फ़िल्टर करें, फिर जो बचा है उसे मैप करें। चेन को ऊपर से नीचे, एक बार में एक चरण पढ़ें। यहाँ से कहाँ जाएं
map, filter, और reduce अधिकांश को कवर करते हैं जो आप एक सूची के साथ करेंगे: इसे रूपांतरित करें, इसे संकीर्ण करें, या इसे संक्षिप्त करें। find, some, और every संकीर्ण सवालों के उत्तर देते हैं। एक बार जब ये प्राकृतिक महसूस करते हैं, तो आपके अधिकांश for लूप एक ऐरे पर एक या दो पंक्तियों में बदल जाते हैं जो कहता है कि आपका मतलब क्या था।
प्राकृतिक अगला चरण objects है, जहाँ ऐरे साधारण संख्या और स्ट्रिंग की तुलना में समृद्ध आइटम रखना शुरू करते हैं, और ये समान तरीके उन पर काम करते रहते हैं। यदि यहाँ कोई भी कॉलबैक सिंटैक्स अस्थिर महसूस करता था, तो functions के माध्यम से एक पास बाकी को जगह देता है।

