Track
/
JavaScript
JavaScript
/
Esercizi
/
Tabellone dei punteggi
Tabellone dei punteggi

Tabellone dei punteggi

Esercizio di apprendimento

Introduzione

Spiegazione

Oltre ai tipi di dati primitivi come number e string, in JavaScript esiste un altro tipo di dati importante chiamato object. Gli oggetti sono raccolte di coppie chiave-valore. Per questo motivo, si possono usare allo stesso modo di quelle che in altri linguaggi vengono spesso chiamate mappe o dizionari.

In altri linguaggi, spesso tutti i valori di una mappa devono avere lo stesso tipo di dati. In JavaScript, invece, è vincolato solo il tipo della chiave: deve essere di tipo string. I valori all'interno di uno stesso oggetto possono avere tipi diversi. Possono essere tipi primitivi come i numeri, ma anche array, altri oggetti o persino funzioni. Questo rende gli oggetti molto versatili, al punto che sono anche elementi chiave della programmazione orientata agli oggetti (OOP) in JavaScript.

Nel seguito ci concentreremo sugli oggetti come raccolte o mappe. Altri casi d'uso degli oggetti saranno trattati in altri concetti, vedi ad esempio Classi.

Creare un oggetto

Un oggetto si crea usando le parentesi graffe. Puoi anche includere direttamente alcune voci. Per farlo, indica prima la chiave, poi due punti e il valore.

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 virgola finale dopo l'ultima voce è opzionale in JavaScript.

Forse ti chiederai perché le chiavi non sono racchiuse tra virgolette anche se dovrebbero essere delle stringhe. Questa è una notazione abbreviata. Se la chiave segue le regole di denominazione per un identificatore JavaScript, puoi omettere le virgolette. Per le chiavi con caratteri speciali nel nome, devi usare la solita notazione delle stringhe.

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

Recuperare un valore

Ci sono due modi per recuperare il valore di una determinata chiave: la notazione con punto e la notazione con parentesi quadre.

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

Usare la notazione con punto come abbreviazione ha la stessa restrizione dell'omettere le virgolette. Funziona solo se la chiave segue le regole di denominazione degli identificatori.

Aggiungere o modificare un valore

Puoi aggiungere o modificare un valore usando l'operatore di assegnazione =. Anche in questo caso sono disponibili la notazione con punto e quella con parentesi quadre.

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

Eliminare una voce

Puoi eliminare una coppia chiave-valore da un oggetto usando la parola chiave delete.

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

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

Verificare se una chiave esiste

Puoi verificare se una determinata chiave esiste in un oggetto con il metodo hasOwnProperty.

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

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

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

Iterare su un oggetto

Esiste un ciclo speciale for...in per iterare su tutte le chiavi di un oggetto.

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

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

Per evitare errori sottili, dovresti sempre presumere che il ciclo for...in visiti le chiavi in un ordine arbitrario. Inoltre, tieni presente che for...in include nell'iterazione anche le chiavi ereditate.

Istruzioni

In questo esercizio, implementerai un modo per tenere traccia dei punteggi più alti del gioco più popolare della tua sala giochi.

Devi implementare 5 funzioni, per lo più legate alla manipolazione di un oggetto che contiene i punteggi più alti.

1. Creare un nuovo tabellone dei punteggi più alti

Crea una funzione createScoreBoard che crea un oggetto che funge da tabellone dei punteggi più alti. Le chiavi di questo oggetto saranno i nomi dei giocatori, i valori saranno i loro punteggi. Per motivi di test, vuoi includere direttamente una voce nell'oggetto. Questa voce iniziale deve consistere in The Best Ever come nome del giocatore e 1000000 come punteggio.

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

2. Aggiungere giocatori a un tabellone dei punteggi

Per aggiungere un giocatore al tabellone dei punteggi più alti, definisci la funzione addPlayer. Accetta 3 parametri:

  • Il primo parametro è un oggetto tabellone dei punteggi esistente.
  • Il secondo parametro è il nome di un giocatore, come stringa.
  • Il terzo parametro è il punteggio, come numero.

La funzione restituisce lo stesso oggetto tabellone dei punteggi che le è stato passato, dopo aver aggiunto il nuovo giocatore.

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

3. Rimuovere giocatori da un tabellone dei punteggi

Se i giocatori violano le regole della sala giochi, vengono rimossi manualmente dal tabellone dei punteggi più alti. Definisci removePlayer, che accetta 2 parametri:

  • Il primo parametro è un oggetto tabellone dei punteggi esistente.
  • Il secondo parametro è il nome del giocatore, come stringa.

Questa funzione deve rimuovere dal tabellone la voce relativa al giocatore indicato e restituire poi il tabellone. Se il giocatore non era presente sul tabellone, non deve succedere nulla al tabellone. Va restituito così com'è.

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

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

4. Aumentare il punteggio di un giocatore

Se un giocatore termina un'altra partita alla sala giochi, una certa quantità di punti verrà aggiunta al punteggio precedente sul tabellone. Implementa updateScore, che accetta 3 parametri:

  • Il primo parametro è un oggetto tabellone dei punteggi esistente.
  • Il secondo parametro è il nome del giocatore il cui punteggio deve essere aumentato.
  • Il terzo parametro è il punteggio che vuoi aggiungere al punteggio più alto memorizzato.

La funzione deve restituire il tabellone dei punteggi dopo che l'aggiornamento è stato eseguito.

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

5. Applicare i punti bonus del lunedì

La sala giochi tiene un tabellone dei punteggi separato il lunedì. Alla fine della giornata, ogni giocatore su quel tabellone riceve 100 punti aggiuntivi.

Implementa la funzione applyMondayBonus, che accetta un tabellone dei punteggi. La funzione aggiunge i punti bonus per ogni giocatore elencato su quel tabellone. Poi, il tabellone viene restituito.

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

applyMondayBonus(scoreBoard);
// => { 'Dave Thomas': 144, 'Freyja Ćirić': 639, 'José Valim': 365 }
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
JavaScript Exercism

Vuoi iniziare Tabellone dei punteggi?

Iscriviti a Exercism per imparare e padroneggiare JavaScript con 37 concetti159 esercizi e il mentoring di persone reali, tutto gratis.