Tracks
/
JavaScript
JavaScript
/
Ejercicios
/
Tablero de puntuaciones
Tablero de puntuaciones

Tablero de puntuaciones

Ejercicio de aprendizaje

Introducción

Explicación

Además de los tipos de datos primitivos como number y string, en JavaScript existe otro tipo de dato importante llamado object. Los objetos son colecciones de pares clave-valor. Como tales, se pueden usar de la misma manera que lo que en otros lenguajes se suele llamar mapas o diccionarios.

En otros lenguajes, a menudo todos los valores de un mapa deben tener el mismo tipo de dato. En JavaScript, solo se restringe el tipo de la clave: tiene que ser un string. Los valores dentro de un mismo objeto pueden tener distintos tipos. Pueden ser tipos primitivos como números, pero también arrays, otros objetos o incluso funciones. Esto hace que los objetos sean muy versátiles, de modo que también son entidades clave para la programación orientada a objetos (POO) en JavaScript.

En lo que sigue, nos centraremos en los objetos como colecciones o mapas. Otros casos de uso de los objetos se cubrirán en otros conceptos; consulta, por ejemplo, Clases.

Crear un objeto

Creas un objeto usando llaves. También puedes incluir algunas entradas directamente. Para eso, indica primero la clave, seguida de dos puntos y el valor.

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 coma final después de la última entrada es opcional en JavaScript.

Quizás te preguntes por qué las claves no están entre comillas, aunque se supone que son strings. Esto es una notación abreviada. Si la clave sigue las reglas de nomenclatura de un identificador de JavaScript, puedes omitir las comillas. Para las claves con caracteres especiales en el nombre, necesitas usar la notación habitual de string.

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

Obtener un valor

Hay dos maneras de obtener el valor de una clave dada: la notación de punto y la notación de corchetes.

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

Usar la notación de punto como forma abreviada tiene la misma restricción que omitir las comillas. Solo funciona si la clave sigue las reglas de nomenclatura de los identificadores.

Agregar o cambiar un valor

Puedes agregar o cambiar un valor usando el operador de asignación =. De nuevo, tienes disponibles la notación de punto y la de corchetes.

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

Eliminar una entrada

Puedes eliminar un par clave-valor de un objeto usando la palabra clave delete.

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

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

Verificar si existe una clave

Puedes verificar si cierta clave existe en un objeto con el método hasOwnProperty.

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

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

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

Recorrer un objeto

Existe un bucle for...in especial para iterar sobre todas las claves de un objeto.

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

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

Para evitar errores sutiles, siempre debes asumir que el bucle for...in recorre las claves en un orden arbitrario. Además, ten en cuenta que for...in incluye las claves heredadas en su iteración.

Instrucciones

En este ejercicio vas a implementar una forma de llevar un registro de los puntajes máximos del juego más popular de tu sala de arcade local.

Tienes que implementar 5 funciones, en su mayoría relacionadas con la manipulación de un objeto que contiene puntajes máximos.

1. Crea un nuevo tablero de puntajes máximos

Crea una función createScoreBoard que cree un objeto que sirva como tablero de puntajes máximos. Las claves de este objeto serán los nombres de los jugadores y los valores serán sus puntajes. Para propósitos de prueba, quieres incluir directamente una entrada en el objeto. Esta entrada inicial debe consistir en The Best Ever como nombre del jugador y 1000000 como puntaje.

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

2. Agrega jugadores a un tablero de puntajes

Para agregar un jugador al tablero de puntajes máximos, define la función addPlayer. Acepta 3 parámetros:

  • El primer parámetro es un objeto de tablero de puntajes existente.
  • El segundo parámetro es el nombre de un jugador como string.
  • El tercer parámetro es el puntaje como número.

La función devuelve el mismo objeto de tablero de puntajes que se pasó, después de agregar al nuevo jugador.

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

3. Elimina jugadores de un tablero de puntajes

Si los jugadores violan las reglas de la sala de arcade, se los elimina manualmente del tablero de puntajes máximos. Define removePlayer, que recibe 2 parámetros:

  • El primer parámetro es un objeto de tablero de puntajes existente.
  • El segundo parámetro es el nombre del jugador como string.

Esta función debe eliminar del tablero la entrada del jugador dado y devolver el tablero después. Si el jugador no estaba en el tablero desde un principio, no debe pasarle nada al tablero. Debe devolverse tal como está.

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

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

4. Aumenta el puntaje de un jugador

Si un jugador termina otra partida en la sala de arcade, se sumará cierta cantidad de puntos al puntaje anterior en el tablero. Implementa updateScore, que recibe 3 parámetros:

  • El primer parámetro es un objeto de tablero de puntajes existente.
  • El segundo parámetro es el nombre del jugador cuyo puntaje debe aumentarse.
  • El tercer parámetro es el puntaje que deseas sumar al puntaje máximo almacenado.

La función debe devolver el tablero de puntajes después de realizar la actualización.

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

5. Aplica los puntos de bonificación de los lunes

La sala de arcade lleva un tablero de puntajes aparte los lunes. Al final del día, cada jugador de ese tablero recibe 100 puntos adicionales.

Implementa la función applyMondayBonus, que acepta un tablero de puntajes. La función suma los puntos de bonificación a cada jugador que aparece en ese tablero. Después, se devuelve el tablero.

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

applyMondayBonus(scoreBoard);
// => { 'Dave Thomas': 144, 'Freyja Ćirić': 639, 'José Valim': 365 }
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
JavaScript Exercism

¿Todo listo para empezar Tablero de puntuaciones?

Regístrate en Exercism para aprender y dominar JavaScript con 37 conceptos159 ejercicios y mentoría humana real, todo gratis.