ट्रैक
/
JavaScript
JavaScript
/
अभ्यास
/
हाई स्कोर बोर्ड
हाई स्कोर बोर्ड

हाई स्कोर बोर्ड

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

परिचय

व्याख्या

JavaScript में number और string जैसे प्रिमिटिव डेटा टाइप के अलावा एक और ज़रूरी डेटा टाइप होता है, जिसे object कहते हैं। ऑब्जेक्ट की-वैल्यू जोड़ों के संग्रह होते हैं। दूसरी भाषाओं में इन्हें अक्सर मैप या डिक्शनरी कहा जाता है, और इनका इस्तेमाल भी वैसे ही किया जा सकता है।

दूसरी भाषाओं में मैप की सारी वैल्यू का डेटा टाइप अक्सर एक ही होना चाहिए। JavaScript में सिर्फ की का टाइप बँधा हुआ है: वह string ही होनी चाहिए। एक ही ऑब्जेक्ट के अंदर की वैल्यू अलग-अलग टाइप की हो सकती हैं। ये संख्याओं जैसे प्रिमिटिव टाइप की हो सकती हैं, और ऐरे, दूसरे ऑब्जेक्ट या फंक्शन भी हो सकती हैं। इसी वजह से ऑब्जेक्ट बहुत बहुमुखी होते हैं, और JavaScript में ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) की मुख्य इकाइयाँ भी हैं।

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

ऑब्जेक्ट बनाना

आप घुंघराले ब्रैकेट इस्तेमाल करके ऑब्जेक्ट बनाते हैं। आप सीधे कुछ एंट्री भी शामिल कर सकते हैं। इसके लिए पहले की लिखिए, फिर कोलन और उसके बाद वैल्यू।

const emptyObject = {};

const obj = {
  favoriteNumber: 42,
  greeting: 'Hello World',
  useGreeting: true,
  address: {
    street: 'Trincomalee Highway',
    city: 'Batticaloa',
  },
  fruits: ['melon', 'papaya'],
  addNumbers: function (a, b) {
    return a + b;
  },
};

आखिरी एंट्री के बाद लगने वाला कोमा JavaScript में ज़रूरी नहीं है।

आपके मन में सवाल आ सकता है कि जब की को स्ट्रिंग होना चाहिए, तो उनके चारों ओर उद्धरण चिह्न क्यों नहीं लगाए जाते। यह एक संक्षिप्त रूप है। अगर की JavaScript के आइडेंटिफायर के नामकरण नियमों का पालन करती है, तो आप उद्धरण चिह्न छोड़ सकते हैं। जिन की के नाम में खास अक्षर हों, उनके लिए सामान्य स्ट्रिंग वाला तरीका इस्तेमाल करना पड़ता है।

const obj = {
  '1keyStartsWithNumber': '...',
  'key/with/slashes': '...',
  'key-with-dashes': '...',
  'key with spaces': '...',
  '#&()[]{}èä樹keyWithSpecialChars': '...',
};

वैल्यू निकालना

किसी दी गई की की वैल्यू निकालने के दो तरीके हैं: डॉट नोटेशन और ब्रैकेट नोटेशन।

const obj = { greeting: 'hello world' };

obj.greeting;
// => hello world

obj['greeting'];
// => hello world

// Bracket notation also works with variables.
const key = 'greeting';
obj[key];
// => hello world

संक्षिप्त रूप के तौर पर डॉट नोटेशन इस्तेमाल करने पर वही पाबंदी लगती है जो उद्धरण चिह्न छोड़ने पर लगती है। यह सिर्फ तब काम करता है जब की आइडेंटिफायर के नामकरण नियमों का पालन करती हो।

वैल्यू जोड़ना या बदलना

आप असाइनमेंट ऑपरेटर = की मदद से वैल्यू जोड़ या बदल सकते हैं। यहाँ भी डॉट और ब्रैकेट नोटेशन मौजूद हैं।

const obj = { greeting: 'hello world' };

obj.greeting = 'Hi there!';
obj['greeting'] = 'Welcome.';

obj.newKey1 = 'new value 1';
obj['new key 2'] = 'new value 2';

const key = 'new key 3';
obj[key] = 'new value 3';

एंट्री हटाना

आप delete कीवर्ड की मदद से ऑब्जेक्ट से कोई की-वैल्यू जोड़ा हटा सकते हैं।

const obj = {
  key1: 'value1',
  key2: 'value2',
};

delete obj.key1;
delete obj['key2'];

कोई की मौजूद है या नहीं, यह जाँचना

आप hasOwnProperty मेथड से जाँच सकते हैं कि ऑब्जेक्ट में कोई की मौजूद है या नहीं।

const obj = { greeting: 'hello world' };

obj.hasOwnProperty('greeting');
// => true

obj.hasOwnProperty('age');
// => false

ऑब्जेक्ट पर लूप चलाना

ऑब्जेक्ट की सारी की पर चलने के लिए एक खास for...in लूप होता है।

const obj = {
  name: 'Ali',
  age: 65,
};

for (let key in obj) {
  console.log(key, obj[key]);
}
// name Ali
// age 65

बारीक गलतियों से बचने के लिए आपको हमेशा यह मानना चाहिए कि for...in लूप की पर किसी भी क्रम में पहुँच सकता है। यह भी ध्यान रखिए कि for...in अपने इटरेशन में विरासत में मिली की को भी शामिल करता है।

निर्देश

इस अभ्यास में आप ऐसा तरीका बना रहे हैं जिससे आपके इलाके के आर्केड हॉल के सबसे लोकप्रिय खेल के हाई स्कोर पर नज़र रखी जा सके।

आपको 5 फंक्शन बनाने हैं। इनमें से ज़्यादातर उस ऑब्जेक्ट को बदलने से जुड़े हैं जिसमें हाई स्कोर रखे जाते हैं।

1. नया हाई स्कोर बोर्ड बनाइए

createScoreBoard नाम का फंक्शन बनाइए। यह एक ऑब्जेक्ट बनाता है, जो हाई स्कोर बोर्ड की तरह काम करता है। इस ऑब्जेक्ट की कीज़ खिलाड़ियों के नाम होंगी और वैल्यूज़ उनके स्कोर होंगी। टेस्ट करने के लिए आप ऑब्जेक्ट में सीधे एक एंट्री शामिल करना चाहते हैं। इस शुरुआती एंट्री में खिलाड़ी का नाम The Best Ever और स्कोर 1000000 होना चाहिए।

createScoreBoard();
// returns an object with one initial entry

2. स्कोर बोर्ड में खिलाड़ी जोड़िए

हाई स्कोर बोर्ड में कोई खिलाड़ी जोड़ने के लिए addPlayer फंक्शन बनाइए। यह 3 पैरामीटर लेता है:

  • पहला पैरामीटर एक मौजूदा स्कोर बोर्ड ऑब्जेक्ट है।
  • दूसरा पैरामीटर खिलाड़ी का नाम है, जो एक स्ट्रिंग होती है।
  • तीसरा पैरामीटर स्कोर है, जो एक संख्या होती है।

नया खिलाड़ी जोड़ने के बाद फंक्शन वही स्कोर बोर्ड ऑब्जेक्ट लौटाता है जो उसे दिया गया था।

addPlayer({ 'Dave Thomas': 0 }, 'José Valim', 486373);
// => {'Dave Thomas': 0, 'José Valim': 486373}

3. स्कोर बोर्ड से खिलाड़ी हटाइए

अगर कोई खिलाड़ी आर्केड हॉल के नियम तोड़ता है, तो उसे हाई स्कोर बोर्ड से हाथ से हटा दिया जाता है। removePlayer बनाइए, जो 2 पैरामीटर लेता है:

  • पहला पैरामीटर एक मौजूदा स्कोर बोर्ड ऑब्जेक्ट है।
  • दूसरा पैरामीटर खिलाड़ी का नाम है, जो एक स्ट्रिंग होती है।

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

removePlayer({ 'Dave Thomas': 0 }, 'Dave Thomas');
// => {}

removePlayer({ 'Dave Thomas': 0 }, 'Rose Fanaras');
// => { 'Dave Thomas': 0 }

4. किसी खिलाड़ी का स्कोर बढ़ाइए

अगर कोई खिलाड़ी आर्केड हॉल में एक और खेल पूरा करता है, तो बोर्ड पर उसके पिछले स्कोर में कुछ अंक जोड़ दिए जाते हैं। updateScore बनाइए, जो 3 पैरामीटर लेता है:

  • पहला पैरामीटर एक मौजूदा स्कोर बोर्ड ऑब्जेक्ट है।
  • दूसरा पैरामीटर उस खिलाड़ी का नाम है जिसका स्कोर बढ़ाया जाना है।
  • तीसरा पैरामीटर वह स्कोर है जिसे बोर्ड पर रखे हाई स्कोर में जोड़ना है।

अपडेट हो जाने के बाद फंक्शन को स्कोर बोर्ड लौटाना चाहिए।

updateScore({ 'Freyja Ćirić': 12771008 }, 'Freyja Ćirić', 73);
// => {"Freyja Ćirić", 12771081}

5. सोमवार के बोनस अंक लगाइए

आर्केड हॉल सोमवार को एक अलग स्कोर बोर्ड रखता है। दिन के अंत में उस बोर्ड पर मौजूद हर खिलाड़ी को 100 अतिरिक्त अंक मिलते हैं।

applyMondayBonus फंक्शन बनाइए, जो एक स्कोर बोर्ड लेता है। यह फंक्शन उस बोर्ड पर दर्ज हर खिलाड़ी के लिए बोनस अंक जोड़ता है। इसके बाद बोर्ड लौटा दिया जाता है।

const scoreBoard = {
  'Dave Thomas': 44,
  'Freyja Ćirić': 539,
  'José Valim': 265,
};

applyMondayBonus(scoreBoard);
// => { 'Dave Thomas': 144, 'Freyja Ćirić': 639, 'José Valim': 365 }
GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
JavaScript Exercism

हाई स्कोर बोर्ड शुरू करने के लिए तैयार हैं?

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