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.
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': '...',
};
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.
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';
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'];
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
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.
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.
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
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:
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}
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:
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 }
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:
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}
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 }
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.