AD

JavaScript Array Methods से बनाएं E-Commerce Shopping Cart: Map, Filter और Reduce का प्रैक्टिकल ट्यूटोरियल

JavaScript Array Methods से बनाएं E-Commerce Shopping Cart: Map, Filter और Reduce का प्रैक्टिकल ट्यूटोरियल

कोडिंग में Array Methods का महत्व क्यों है?

जब आप कोडिंग या वेब डेवलपमेंट सीखना शुरू करते हैं, तो डेटा के ग्रुप (Array) को प्रोसेस करने के लिए सबसे पहले for loop या while loop सिखाया जाता है। शुरुआती दौर में लूप समझना आसान होता है, लेकिन जब आप आधुनिक वेब डेवलपमेंट (जैसे React, Node.js या Angular) में काम करते हैं, तो बार-बार पारंपरिक लूप्स लिखने से आपका कोड लंबा, जटिल और पढ़ने में मुश्किल हो जाता है।

मॉडर्न जावास्क्रिप्ट (ES6+) में Map, Filter और Reduce जैसे एरे मेथड्स का इस्तेमाल सबसे ज्यादा होता है। इस ट्यूटोरियल में हम केवल किताबी परिभाषा नहीं सीखेंगे, बल्कि फ्लिपकार्ट या अमेज़न जैसी ई-कॉमर्स वेबसाइट के Shopping Cart Logic का एक प्रैक्टिकल रियल-वर्ल्ड उदाहरण बनाकर इन तीनों मेथड्स को आसान हिंदी में समझेंगे।

प्रोजेक्ट का लक्ष्य: शॉपिंग कार्ट डेटा प्रोसेसिंग

मान लीजिए कि आप एक ई-कॉमर्स वेबसाइट का बैकएंड या फ्रंटएंड लॉजिक लिख रहे हैं। यूज़र ने कार्ट में 4 आइटम्स जोड़े हैं। अब एक डेवलपर के रूप में आपको तीन मुख्य काम करने हैं:

  • स्टेप 1 (Filter): कार्ट में से उन प्रोडक्ट्स को हटाना जो आउट ऑफ स्टॉक (Out of Stock) हैं।
  • स्टेप 2 (Map): बचे हुए सभी उपलब्ध प्रोडक्ट्स पर 10% का फेस्टिव डिस्काउंट (Discount) लागू करना।
  • स्टेप 3 (Reduce): डिस्काउंट के बाद यूज़र का फाइनल बिल (Total Bill Amount) कैलकुलेट करना।

चलिए, सबसे पहले शॉपिंग कार्ट के शुरुआती डेटा (Array of Objects) को तैयार करते हैं।

शुरुआती डेटा सेट (Initial Shopping Cart Data)

नीचे दिए गए कोड में हमारे पास cartItems नाम का एक एरे है जिसमें प्रोडक्ट्स की जानकारी ऑब्जेक्ट के रूप में स्टोर है:

const cartItems = [
  { id: 1, name: "Wireless Mouse", price: 800, inStock: true },
  { id: 2, name: "Gaming Keyboard", price: 2500, inStock: false },
  { id: 3, name: "USB-C Cable", price: 400, inStock: true },
  { id: 4, name: "Bluetooth Speaker", price: 1800, inStock: true }
];

ऊपर दिए गए डेटा में 'Gaming Keyboard' आउट ऑफ स्टॉक (inStock: false) है। आइए अब अपनी समस्याओं को हल करते हैं।

1. Filter Method: आउट ऑफ स्टॉक प्रोडक्ट्स को हटाना

filter() मेथड का काम एरे के हर एलिमेंट को चेक करना और एक शर्त (Condition) के आधार पर केवल वही आइटम्स चुनना है जो उस शर्त को पूरा करते हैं। यह एक नया एरे रिटर्न करता है और ओरिजिनल एरे को नहीं बदलता।

लॉजिक और कोड:

हमें केवल वही प्रोडक्ट्स चाहिए जिनका inStock मान true हो।

// केवल स्टॉक में मौजूद प्रोडक्ट्स को फिल्टर करें
const availableItems = cartItems.filter(item => item.inStock === true);

console.log(availableItems);

आउटपुट:

अब availableItems एरे में केवल 3 प्रोडक्ट्स बचे हैं (Mouse, USB-C Cable, और Speaker)। Keyboard एरे से हट चुका है क्योंकि वह स्टॉक में नहीं था।

2. Map Method: डिस्काउंटेड प्राइस कैलकुलेट करना

map() मेथड का इस्तेमाल एरे के हर एक एलिमेंट को ट्रांसफर (Modify) करने के लिए किया जाता है। यह हर आइटम पर एक फंक्शन चलाता है और मॉडिफाइड डेटा का एक नया एरे तैयार करके देता है।

लॉजिक और कोड:

अब हम उपलब्ध प्रोडक्ट्स (availableItems) पर 10% का डिस्काउंट लगाएंगे। यानी नई कीमत = price * 0.90 होगी।

// हर प्रोडक्ट पर 10% डिस्काउंट लागू करें
const discountedItems = availableItems.map(item => {
  return {
    name: item.name,
    originalPrice: item.price,
    discountedPrice: item.price * 0.90
  };
});

console.log(discountedItems);

आउटपुट:

map() ने हमें एक नया एरे दिया जिसमें हर प्रोडक्ट का नाम, पुरानी कीमत और 10% छूट के बाद की नई कीमत (discountedPrice) मौजूद है। जैसे Wireless Mouse का प्राइस 800 से घटकर 720 हो गया।

3. Reduce Method: कार्ट का कुल बिल बनाना

reduce() मेथड सबसे पावरफुल और थोड़ा समझने में चुनौतीपूर्ण मेथड है। इसका काम एक पूरे एरे के डेटा को प्रोसेस करके एक सिंगल वैल्यू (जैसे Total Sum, Average, या Object) में बदलना होता है।

इसमें दो मुख्य पैरामीटर होते हैं: Accumulator (जो पुरानी गणना को जोड़कर रखता है) और Current Value (जो एरे का वर्तमान एलिमेंट होता है)।

लॉजिक और कोड:

हम डिस्काउंटेड कीमतों को आपस में जोड़कर यूज़र का कुल पेएबल अमाउंट कैलकुलेट करेंगे।

// कुल बिल की गणना करें (शुरुआती Accumulator वैल्यू 0 है)
const totalBill = discountedItems.reduce((accumulator, item) => {
  return accumulator + item.discountedPrice;
}, 0);

console.log("यूज़र का कुल बिल:", totalBill);

कैलकुलेशन कैसे हुआ?

  • शुरुआत में accumulator = 0
  • पहला आइटम (Mouse): 0 + 720 = 720
  • दूसरा आइटम (Cable): 720 + 360 = 1080
  • तीसरा आइटम (Speaker): 1080 + 1620 = 2700
  • फाइनल आउटपुट: ₹2700

प्रोफेशनल तरीका: Method Chaining (मेथड चेनिंग)

रियल-वर्ल्ड सॉफ्टवेयर कंपनियों में अलग-अलग वेरिएबल बनाने के बजाय इन तीनों मेथड्स को एक साथ जोड़कर (Chain करके) लिखा जाता है। इससे कोड बेहद क्लीन और फास्ट हो जाता है।

const finalAmount = cartItems
  .filter(item => item.inStock)
  .map(item => item.price * 0.90)
  .reduce((total, price) => total + price, 0);

console.log("फाइनल बिल Amount:", finalAmount); // Output: 2700

देखा आपने? जो काम करने में पारंपरिक `for loop` के साथ 20-25 लाइनें लगतीं, वह काम मेथड चेनिंग के ज़रिए सिर्फ 4 लाइनों में पूरा हो गया!

बिगिनर्स द्वारा की जाने वाली 4 आम गलतियां

  • Original Array को म्यूटेट (Mutate) करने की कोशिश करना: याद रखें कि map और filter हमेशा एक नया एरे रिटर्न करते हैं, वे पुराने एरे में कोई बदलाव नहीं करते।
  • Return Keyword भूल जाना: यदि आप Arrow function में कर्ली ब्रेसिज़ {} का इस्तेमाल कर रहे हैं, तो return लिखना अनिवार्य है। वरना आपको undefined मिलेगा।
  • Reduce में Initial Value न देना: reduce() के अंत में , 0 (शुरुआती वैल्यू) देना न भूलें, वरना खाली एरे होने पर कोड एरर दे देगा।
  • forEach और map में भ्रम: अगर आपको नया एरे बनाना है तो map() का इस्तेमाल करें। अगर सिर्फ कंसोल लॉग या साइड-इफेक्ट करना है तो forEach() का इस्तेमाल करें।

निष्कर्ष

जावास्क्रिप्ट में map(), filter() और reduce() केवल इंटरव्यू के सवाल नहीं हैं, बल्कि ये मॉडर्न प्रोग्रामिंग का आधार हैं। जब आप React में लिस्ट्स रेंडर करेंगे या API डेटा को फ़िल्टर करेंगे, तब ये मेथड्स आपके सबसे अच्छे दोस्त साबित होंगे। इस कोड को अपने सिस्टम पर VS Code या ब्राउज़र कंसोल में चलाकर खुद प्रैक्टिस ज़रूर करें।

Frequently Asked Questions (FAQs)

1. क्या map() और forEach() एक ही काम करते हैं?

नहीं, दोनों में बड़ा अंतर है। map() एक नया मॉडिफाइड एरे रिटर्न करता है, जबकि forEach() कोई वैल्यू रिटर्न नहीं करता (यह केवल लूप चलाता है)।

2. क्या हम reduce() का इस्तेमाल एरे की जगह ऑब्जेक्ट बनाने के लिए कर सकते हैं?

हां, reduce() बहुत फ्लेक्सिबल है। इससे आप एरे को नंबर, स्ट्रिंग, ऑब्जेक्ट या किसी अन्य डेटा स्ट्रक्चर में बदल सकते हैं।

3. क्या large array डेटा पर इन मेथड्स का इस्तेमाल करने से परफॉरमेंस स्लो होती है?

बहुत बड़े एरे (जैसे 10 लाख से ज्यादा आइटम्स) पर मेथड चेनिंग से multiple iterations होते हैं। ऐसे रेयर मामलों में पारंपरिक `for` loop थोड़ा तेज़ हो सकता है, लेकिन सामान्य ऐप्स में इनका परफॉरमेंस अंतर न के बराबर होता है।

4. क्या Arrow Functions का इस्तेमाल करना ज़रूरी है?

ज़रूरी नहीं है, आप नॉर्मल function() कीवर्ड का भी इस्तेमाल कर सकते हैं। लेकिन Arrow Functions से कोड छोटा और आधुनिक दिखता है।

Post a Comment

0 Comments