Kurzusok
/
JavaScript
JavaScript
/
Feladatok
/
Pontszámtábla
Pontszámtábla

Pontszámtábla

Tanulófeladat

Bevezetés

Magyarázat

A number és string primitív adattípusok mellett van még egy fontos adattípus a JavaScriptben: az object. Az objektumok kulcs-érték párokból álló gyűjtemények. Ezért ugyanúgy használhatók, mint amit más nyelvekben gyakran mapnek vagy szótárnak neveznek.

Más nyelvekben egy mapban gyakran minden értéknek ugyanolyan adattípusúnak kell lennie. A JavaScriptben csak a kulcs típusa kötött: string kell hogy legyen. Egy objektumon belül az értékek különböző típusúak lehetnek. Lehetnek primitív típusok, például számok, de lehetnek tömbök, más objektumok vagy akár függvények is. Ez nagyon sokoldalúvá teszi az objektumokat, ezért kulcsfontosságú szereplői a JavaScript objektumorientált programozásának (OOP) is.

A következőkben az objektumokra mint gyűjteményekre vagy mapokra összpontosítunk. Az objektumok további felhasználási eseteiről más fogalmakban lesz szó, lásd például az Osztályok fogalmat.

Objektum létrehozása

Egy objektumot kapcsos zárójellel hozol létre. Közvetlenül is megadhatsz néhány bejegyzést. Ehhez először a kulcsot add meg, majd egy kettőspontot, végül az értéket.

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;
  },
};

Az utolsó bejegyzés utáni vessző elhagyható a JavaScriptben.

Felmerülhet benned, hogy miért nincsenek a kulcsok idézőjelbe téve, pedig elvileg stringek. Ez egy rövidített jelölés. Ha a kulcs megfelel egy JavaScript azonosító elnevezési szabályainak, elhagyhatod az idézőjeleket. Ha a kulcs neve speciális karaktereket tartalmaz, a szokásos string jelölést kell használnod.

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

Érték lekérése

Egy adott kulcs értékét kétféleképpen kérheted le: pontjelöléssel és szögletes zárójeles jelöléssel.

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

A pontjelölés rövidítésként ugyanolyan megkötéssel jár, mint az idézőjelek elhagyása. Csak akkor működik, ha a kulcs követi az azonosítók elnevezési szabályait.

Érték hozzáadása vagy módosítása

Egy értéket az = értékadó operátorral adhatsz hozzá vagy módosíthatsz. Itt is a pont- és a szögletes zárójeles jelölés áll rendelkezésre.

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';

Bejegyzés törlése

Egy kulcs-érték párt a delete kulcsszóval törölhetsz egy objektumból.

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

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

Kulcs létezésének ellenőrzése

A hasOwnProperty metódussal ellenőrizheted, hogy létezik-e egy adott kulcs egy objektumban.

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

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

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

Végighaladás egy objektumon

Van egy speciális for...in ciklus, amellyel egy objektum összes kulcsán végighaladhatsz.

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

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

A nehezen észrevehető hibák elkerülése érdekében mindig feltételezd, hogy a for...in ciklus tetszőleges sorrendben járja be a kulcsokat. Arra is figyelj, hogy a for...in az örökölt kulcsokat is bevonja az iterációba.

Utasítások

Ebben a feladatban egy módot valósítasz meg arra, hogy nyilván tartsd a helyi játékterem legnépszerűbb játékának csúcseredményeit.

Öt függvényt kell megvalósítanod, amelyek közül a legtöbb egy csúcseredményeket tároló objektum kezeléséhez kapcsolódik.

1. Hozz létre egy új eredménytáblát

Készíts egy createScoreBoard nevű függvényt, amely létrehoz egy eredménytáblaként szolgáló objektumot. Az objektum kulcsai a játékosok nevei lesznek, az értékek pedig a pontszámaik. A tesztelés kedvéért rögtön be szeretnél venni egy bejegyzést az objektumba. Ez a kezdő bejegyzés a The Best Ever játékosnévből és az 1000000 pontszámból álljon.

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

2. Adj hozzá játékosokat egy eredménytáblához

Ha játékost szeretnél hozzáadni az eredménytáblához, definiáld az addPlayer függvényt. Három paramétert fogad:

  • Az első paraméter egy létező eredménytábla-objektum.
  • A második paraméter a játékos neve stringként.
  • A harmadik paraméter a pontszám számként.

A függvény az új játékos hozzáadása után ugyanazt az eredménytábla-objektumot adja vissza, amelyet megkapott.

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

3. Távolítsd el a játékosokat egy eredménytábláról

Ha a játékosok megszegik a játékterem szabályait, kézzel eltávolítják őket az eredménytábláról. Definiáld a removePlayer függvényt, amely két paramétert vesz át:

  • Az első paraméter egy létező eredménytábla-objektum.
  • A második paraméter a játékos neve stringként.

Ennek a függvénynek el kell távolítania az adott játékos bejegyzését a tábláról, majd ezután vissza kell adnia a táblát. Ha a játékos eleve nem szerepelt a táblán, a táblával nem történik semmi, és változatlanul kell visszaadni.

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

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

4. Növeld egy játékos pontszámát

Ha egy játékos újabb játékot fejez be a játékteremben, bizonyos pontszám hozzáadódik a táblán lévő korábbi pontszámához. Valósítsd meg az updateScore függvényt, amely három paramétert vesz át:

  • Az első paraméter egy létező eredménytábla-objektum.
  • A második paraméter annak a játékosnak a neve, akinek növelni kell a pontszámát.
  • A harmadik paraméter az a pontszám, amelyet a tárolt csúcseredményhez hozzá szeretnél adni.

A függvény a frissítés elvégzése után adja vissza az eredménytáblát.

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

5. Alkalmazz hétfői bónuszpontokat

A játékterem hétfőnként külön eredménytáblát vezet. A nap végén azon a táblán szereplő minden játékos 100 pluszpontot kap.

Valósítsd meg az applyMondayBonus függvényt, amely átvesz egy eredménytáblát. A függvény hozzáadja a bónuszpontokat minden játékoshoz, aki szerepel a táblán. Ezután visszaadja a táblát.

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

applyMondayBonus(scoreBoard);
// => { 'Dave Thomas': 144, 'Freyja Ćirić': 639, 'José Valim': 365 }
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
JavaScript Exercism

Készen állsz elkezdeni a(z) Pontszámtábla feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) JavaScript nyelvet 37 fogalom159 feladat segítségével, valódi emberi mentorálással, mindez ingyen.