ट्रैक
/
JavaScript
JavaScript
/
अभ्यास
/
ट्रेन ड्राइवर
ट्रेन ड्राइवर

ट्रेन ड्राइवर

सीखने का अभ्यास

परिचय

JavaScript में ... नाम का एक ऑपरेटर पहले से मौजूद है, जिससे अनिश्चित संख्या में एलिमेंट के साथ काम करना आसान हो जाता है। संदर्भ के अनुसार इसे रेस्ट ऑपरेटर या स्प्रेड ऑपरेटर कहा जाता है।

रेस्ट ऑपरेटर

रेस्ट एलिमेंट

जब ... किसी असाइनमेंट के बाईं ओर आता है, तो उन तीन बिंदुओं को rest ऑपरेटर कहा जाता है। तीन बिंदुओं और एक वेरिएबल के नाम को मिलाकर रेस्ट एलिमेंट कहा जाता है। यह शून्य या उससे अधिक वैल्यू इकट्ठा करता है और उन्हें एक ही ऐरे में संग्रहीत करता है।

const [a, b, ...everythingElse] = [0, 1, 1, 2, 3, 5, 8];
a;
// => 0
b;
// => 1
everythingElse;
// => [1, 2, 3, 5, 8]

ध्यान दीजिए कि JavaScript में, कुछ अन्य भाषाओं के विपरीत, rest एलिमेंट के बाद कॉमा नहीं लगाया जा सकता। डिस्ट्रक्चरिंग असाइनमेंट में यह अंतिम एलिमेंट ही होना चाहिए। नीचे दिया गया उदाहरण एक SyntaxError देता है:

const [...items, last] = [2, 4, 8, 16]

रेस्ट प्रॉपर्टी

ऐरे की तरह ही, रेस्ट ऑपरेटर का उपयोग एक या अधिक ऑब्जेक्ट प्रॉपर्टी इकट्ठा करके उन्हें एक ही ऑब्जेक्ट में संग्रहीत करने के लिए भी किया जा सकता है।

const { street, ...address } = {
  street: 'Platz der Republik 1',
  postalCode: '11011',
  city: 'Berlin',
};
street;
// => 'Platz der Republik 1'
address;
// => {postalCode: '11011', city: 'Berlin'}

रेस्ट पैरामीटर

जब किसी फंक्शन को बनाते समय ... उसके अंतिम आर्गुमेंट के पास लिखा जाता है, तो उस पैरामीटर को रेस्ट पैरामीटर कहते हैं। इसकी मदद से फंक्शन अनिश्चित संख्या के आर्गुमेंट एक ऐरे के रूप में ले सकता है।

function concat(...strings) {
  return strings.join(' ');
}
concat('one');
// => 'one'
concat('one', 'two', 'three');
// => 'one two three'

स्प्रेड

स्प्रेड एलिमेंट

जब ... किसी असाइनमेंट के दाईं ओर आता है, तो इसे spread ऑपरेटर कहा जाता है। यह एक ऐरे को एलिमेंट की सूची में बदल देता है। रेस्ट एलिमेंट की तरह यह किसी ऐरे लिटरल एक्सप्रेशन में कहीं भी आ सकता है, और एक से अधिक भी हो सकते हैं।

const oneToFive = [1, 2, 3, 4, 5];
const oneToTen = [...oneToFive, 6, 7, 8, 9, 10];
oneToTen;
// => [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
const woow = ['A', ...oneToFive, 'B', 'C', 'D', 'E', ...oneToFive, 42];
woow;
// =>  ["A", 1, 2, 3, 4, 5, "B", "C", "D", "E", 1, 2, 3, 4, 5, 42]

स्प्रेड प्रॉपर्टी

ऐरे की तरह ही, स्प्रेड ऑपरेटर का उपयोग एक ऑब्जेक्ट से दूसरे ऑब्जेक्ट में प्रॉपर्टी कॉपी करने के लिए भी किया जा सकता है।

let address = {
  postalCode: '11011',
  city: 'Berlin',
};
address = { ...address, country: 'Germany' };
// => {
//   postalCode: '11011',
//   city: 'Berlin',
//   country: 'Germany',
// }

निर्देश

आपके दोस्त Linus एक ट्रेन ड्राइवर हैं, जो शहरों के बीच मालगाड़ियाँ चलाते हैं। ट्रेनें चलाने में वे बहुत अच्छे हैं, लेकिन लॉजिस्टिक्स या कंप्यूटर के मामले में उतने अच्छे नहीं हैं। वे चाहते हैं कि आप प्रोग्रामिंग की मदद से ट्रेन की जानकारी व्यवस्थित करें और रूट डेटा की गलतियाँ सुधारें।

Note

अभ्यास के लिए, नीचे दिए गए हर काम को हल करने में रेस्ट या स्प्रेड ऑपरेटर का इस्तेमाल कीजिए।

1. सभी वैगनों का ऐरे बनाइए

आपके दोस्त हर वैगन का पहचानकर्ता (ID) दर्ज करते आ रहे हैं, लेकिन उन्हें कभी पक्का पता नहीं रहता कि सिस्टम को किसी भी समय कितने वैगन संभालने पड़ेंगे। बाकी लॉजिस्टिक्स प्रोग्राम के लिए यह बहुत आसान होगा कि यह सारा डेटा एक ही array में पैक कर दिया जाए।

एक फंक्शन getListOfWagons बनाइए जो किसी भी संख्या में वैगन ID लेता है। ये ID हर वैगन के ID होते हैं। हर ID एक धनात्मक पूर्णांक होगा। फंक्शन को दिए गए सारे ID एक ही array के रूप में लौटाने चाहिए।

getListOfWagons(1, 7, 12, 3, 14, 8, 5);
// => [1, 7, 12, 3, 14, 8, 5]

2. पहले दो एलिमेंट को ऐरे के अंत में ले जाइए

अब तक आपको इस डेटा की और लॉजिस्टिक्स प्रोग्राम में इसके इस्तेमाल की थोड़ी समझ होने लगी होगी। ID सिस्टम हमेशा लोकोमोटिव को 1 ID असाइन करता है, जबकि ट्रेन के बाकी वैगनों को 1 से बड़ा कोई रैंडम ID असाइन किया जाता है।

आपके दोस्त को ट्रेन में दो नए वैगन जोड़ने पड़े और वे सिस्टम अपडेट करना भूल गए! अब ट्रेन के array में पहले दो वैगनों को अंत में ले जाना है, वरना सारा क्रम बिगड़ जाएगा।

Linus आपकी इस मदद के लिए बहुत आभारी होंगे।

एक फंक्शन fixListOfWagons बनाइए जो हर वैगन के ID का एक ऐरे लेता है। यह एक array return करता है जिसमें पहले दो एलिमेंट array के अंत में ले जाए जाते हैं, ताकि लोकोमोटिव ट्रेन के सबसे आगे हो सके।

eachWagonsID = [2, 5, 1, 7, 4, 12, 6, 3, 13];
fixListOfWagons(eachWagonsID);
// => [1, 7, 4,  12, 6, 3, 13, 2, 5]

3. छूटी हुई वैल्यू जोड़िए

अरे! लगता है कुछ वैगन गायब हो गए हैं।

अच्छी बात है कि आपके दोस्त को अभी एक और array मिला है, जिसमें शायद वे गायब वैगन ID हैं, और वे चाहते हैं कि आप इन्हें मुख्य वैगन ID array में जोड़ दें। उन्हें बस इतना याद है कि छूटी हुई वैल्यू उस लोकोमोटिव के ठीक बाद रखी जानी चाहिए।

इस नई जानकारी के आधार पर correctListOfWagons नाम का फंक्शन लिखिए, जो आर्गुमेंट के रूप में दो ऐरे लेता है जिनमें हर वैगन के ID होते हैं। दूसरे array के वैगन ID पहले array में लोकोमोटिव (ID 1) के ठीक बाद जोड़े जाने चाहिए।

eachWagonsID = [1, 5, 20, 7, 4, 8];
missingWagons = [3, 17, 6, 15];
correctListOfWagons(eachWagonsID, missingWagons);
// => [1, 3, 17, 6, 15, 5, 20, 7, 4, 8]

4. रूटिंग जानकारी का विस्तार कीजिए

अब जब सारा वैगन डेटा सही है, तो आपके दोस्त चाहते हैं कि आप सिस्टम की रूटिंग जानकारी अपडेट कर दें। शुरुआती रूटिंग जानकारी एक object के रूप में बनाई गई है, और आपके दोस्त चाहते हैं कि आप उसमें दी गई जानकारी जोड़कर उसे अपडेट कर दें। हर रूट के लिए थोड़ी अलग जानकारी चाहिए, इसलिए आपके दोस्त ऐसा हल चाहते हैं जो हर रूट पर काम करे।

एक फंक्शन extendRouteInformation बनाइए जो दो objects लेता है। पहले object में यह होता है कि ट्रेन का रूट किन शहरों के बीच चलता है।

दूसरे object में ट्रेन की गति या लंबाई जैसी रूटिंग की दूसरी जानकारी होती है। फंक्शन को सारी रूटिंग जानकारी के साथ एक ही object लौटाना चाहिए।

Note

वेरिएबल moreRouteInformation में अलग-अलग प्रॉपर्टी हो सकती हैं।

route = { from: 'Berlin', to: 'Hamburg' };
moreRouteInformation = { length: '100', speed: '50' };
extendRouteInformation(route, moreRouteInformation);
// => {from: "Berlin", to: "Hamburg", length: "100", speed: "50"}

5. आगमन समय को रूटिंग जानकारी से अलग कीजिए

आपके दोस्त ने देखा है कि उन्हें रूटिंग जानकारी में आगमन समय की ज़रूरत नहीं है। इसलिए वे चाहते हैं कि आप आगमन समय को रूटिंग जानकारी से अलग कर दें।

एक फंक्शन separateTimeOfArrival बनाइए जो रूटिंग जानकारी वाला एक ऑब्जेक्ट लेता है। फंक्शन को एक ऐरे लौटाना चाहिए जिसका पहला एलिमेंट आगमन समय हो और दूसरा एलिमेंट बिना आगमन समय वाली रूटिंग जानकारी का ऑब्जेक्ट हो।

routeInformation = {
  from: 'Berlin',
  to: 'Hamburg',
  length: '100',
  timeOfArrival: '10:10',
};
separateTimeOfArrival(routeInformation);
// => ["10:10", {from: "Berlin", to: "Hamburg", length: "100"}]
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
JavaScript Exercism

ट्रेन ड्राइवर शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और JavaScript को 37 कॉन्सेप्ट159 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।