Outre les types de données primitifs comme number et string, il existe en JavaScript un autre type de données important : object.
Les objets sont des collections de paires clé-valeur.
À ce titre, on peut les utiliser de la même manière que ce que d'autres langages appellent souvent des tables associatives ou des dictionnaires.
Dans d'autres langages, toutes les valeurs d'une table associative doivent souvent avoir le même type de données.
En JavaScript, seul le type de la clé est contraint : il doit s'agir d'une string.
Les valeurs d'un même objet peuvent avoir des types différents.
Elles peuvent être des types primitifs comme les nombres, mais aussi des tableaux, d'autres objets ou même des fonctions.
Les objets sont donc très polyvalents, ce qui en fait aussi des entités clés de la programmation orientée objet (POO) en JavaScript.
Dans ce qui suit, on va s'intéresser aux objets en tant que collections ou tables associatives. D'autres utilisations des objets seront abordées dans d'autres concepts, voir par exemple les classes.
On crée un objet à l'aide d'accolades. Tu peux aussi y inclure directement des entrées. Pour cela, indique d'abord la clé, puis un deux-points et la valeur.
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;
},
};
La virgule finale après la dernière entrée est facultative en JavaScript.
Tu te demandes peut-être pourquoi les clés ne sont pas entourées de guillemets alors qu'elles sont censées être des strings. C'est une notation abrégée. Si la clé respecte les règles de nommage d'un identifiant JavaScript, tu peux omettre les guillemets. Pour les clés dont le nom contient des caractères spéciaux, il faut utiliser la notation habituelle, avec des guillemets.
const obj = {
'1keyStartsWithNumber': '...',
'key/with/slashes': '...',
'key-with-dashes': '...',
'key with spaces': '...',
'#&()[]{}èä樹keyWithSpecialChars': '...',
};
Il y a deux façons de récupérer la valeur associée à une clé donnée : la notation pointée et la notation avec crochets.
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
Utiliser la notation pointée comme raccourci impose la même restriction que l'omission des guillemets. Elle ne fonctionne que si la clé respecte les règles de nommage des identifiants.
Tu peux ajouter ou modifier une valeur à l'aide de l'opérateur d'affectation =.
Là encore, les notations pointée et avec crochets sont disponibles.
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';
Tu peux supprimer une paire clé-valeur d'un objet à l'aide du mot-clé delete.
const obj = {
key1: 'value1',
key2: 'value2',
};
delete obj.key1;
delete obj['key2'];
Tu peux vérifier si une clé donnée existe dans un objet avec la méthode hasOwnProperty.
const obj = { greeting: 'hello world' };
obj.hasOwnProperty('greeting');
// => true
obj.hasOwnProperty('age');
// => false
Il existe une boucle spéciale for...in pour parcourir toutes les clés d'un objet.
const obj = {
name: 'Ali',
age: 65,
};
for (let key in obj) {
console.log(key, obj[key]);
}
// name Ali
// age 65
Pour éviter des erreurs subtiles, considère toujours que la boucle for...in parcourt les clés dans un ordre arbitraire.
Sache aussi que for...in inclut les clés héritées dans son itération.
Dans cet exercice, tu vas mettre en place un moyen de garder une trace des meilleurs scores du jeu le plus populaire de ta salle d'arcade.
Tu as 5 fonctions à implémenter, qui servent principalement à manipuler un objet contenant les meilleurs scores.
Crée une fonction createScoreBoard qui crée un objet servant de tableau des meilleurs scores.
Les clés de cet objet seront les noms des joueurs et les valeurs, leurs scores.
Pour les besoins des tests, tu veux inclure directement une entrée dans l'objet.
Cette entrée initiale doit contenir The Best Ever comme nom de joueur et 1000000 comme score.
createScoreBoard();
// returns an object with one initial entry
Pour ajouter un joueur au tableau des meilleurs scores, définis la fonction addPlayer.
Elle prend 3 paramètres :
La fonction renvoie le même objet tableau des meilleurs scores qui lui a été passé, après avoir ajouté le nouveau joueur.
addPlayer({ 'Dave Thomas': 0 }, 'José Valim', 486373);
// => {'Dave Thomas': 0, 'José Valim': 486373}
Si des joueurs enfreignent les règles de la salle d'arcade, ils sont retirés manuellement du tableau des meilleurs scores.
Définis removePlayer, qui prend 2 paramètres :
Cette fonction doit retirer du tableau l'entrée correspondant au joueur donné, puis renvoyer le tableau. Si le joueur n'était pas présent sur le tableau au départ, rien ne doit changer et le tableau doit être renvoyé tel quel.
removePlayer({ 'Dave Thomas': 0 }, 'Dave Thomas');
// => {}
removePlayer({ 'Dave Thomas': 0 }, 'Rose Fanaras');
// => { 'Dave Thomas': 0 }
Si un joueur termine une nouvelle partie dans la salle d'arcade, un certain nombre de points est ajouté à son score précédent sur le tableau.
Implémente updateScore, qui prend 3 paramètres :
La fonction doit renvoyer le tableau des meilleurs scores une fois la mise à jour effectuée.
updateScore({ 'Freyja Ćirić': 12771008 }, 'Freyja Ćirić', 73);
// => {"Freyja Ćirić", 12771081}
Le lundi, la salle d'arcade tient un tableau des meilleurs scores distinct. À la fin de la journée, chaque joueur inscrit sur ce tableau reçoit 100 points supplémentaires.
Implémente la fonction applyMondayBonus, qui prend un tableau des meilleurs scores.
La fonction ajoute les points bonus à chaque joueur inscrit sur ce tableau, puis renvoie le tableau.
const scoreBoard = {
'Dave Thomas': 44,
'Freyja Ćirić': 539,
'José Valim': 265,
};
applyMondayBonus(scoreBoard);
// => { 'Dave Thomas': 144, 'Freyja Ćirić': 639, 'José Valim': 365 }
Inscris-toi sur Exercism pour apprendre et maîtriser JavaScript avec 37 concepts159 exercices, et un vrai mentorat humain, le tout gratuitement.