Trilhas
/
JavaScript
JavaScript
/
Exercícios
/
Placar de Recordes
Placar de Recordes

Placar de Recordes

Exercício de aprendizagem

Introdução

Explicação

Além dos tipos de dados primitivos como number e string, existe outro tipo de dados importante em JavaScript chamado object. Objetos são coleções de pares de chave-valor. Assim, eles podem ser usados da mesma forma que o que costuma ser chamado de mapas ou dicionários em outras linguagens.

Em outras linguagens, todos os valores de um mapa geralmente precisam ter o mesmo tipo de dados. Em JavaScript, apenas o tipo da chave é restrito: ela precisa ser uma string. Os valores dentro de um objeto podem ter tipos diferentes. Eles podem ser tipos primitivos como números, mas também arrays, outros objetos ou até funções. Isso torna os objetos muito versáteis, de modo que também são entidades centrais para a programação orientada a objetos (POO) em JavaScript.

A seguir, vamos nos concentrar em objetos como coleções ou mapas. Outros casos de uso de objetos serão abordados em outros conceitos; veja, por exemplo, Classes.

Criando um objeto

Você cria um objeto usando chaves. Você também pode incluir algumas entradas diretamente. Para isso, informe a chave primeiro, seguida de dois-pontos e do 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;
  },
};

A vírgula final após a última entrada é opcional em JavaScript.

Você pode se perguntar por que as chaves não estão envolvidas por aspas, embora devessem ser strings. Essa é uma notação abreviada. Se a chave seguir as regras de nomenclatura de um identificador JavaScript, você pode omitir as aspas. Para chaves com caracteres especiais no nome, você precisa usar a notação de string usual.

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

Obtendo um valor

Há duas maneiras de obter o valor de uma determinada chave: notação de ponto e notação de colchetes.

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 a notação de ponto como forma abreviada tem a mesma restrição que omitir as aspas. Ela só funciona se a chave seguir as regras de nomenclatura de identificadores.

Adicionando ou alterando um valor

Você pode adicionar ou alterar um valor usando o operador de atribuição =. Novamente, há notações de ponto e de colchetes disponíveis.

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

Excluindo uma entrada

Você pode excluir um par chave-valor de um objeto usando a palavra-chave delete.

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

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

Verificando se uma chave existe

Você pode verificar se uma determinada chave existe em um objeto com o método hasOwnProperty.

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

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

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

Iterando sobre um objeto

Há um laço for...in especial para iterar sobre todas as chaves de um objeto.

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

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

Para evitar erros sutis, você deve sempre assumir que o laço for...in visita as chaves em uma ordem arbitrária. Além disso, lembre-se de que o for...in inclui chaves herdadas em sua iteração.

Instruções

Neste exercício, você vai implementar uma forma de acompanhar os recordes do jogo mais popular do fliperama da sua região.

Você tem 5 funções para implementar, a maioria relacionada à manipulação de um objeto que guarda os recordes.

1. Criar um novo placar de recordes

Crie uma função createScoreBoard que cria um objeto que serve como placar de recordes. As chaves desse objeto serão os nomes dos jogadores e os valores serão as pontuações deles. Para fins de teste, você quer incluir uma entrada diretamente no objeto. Essa entrada inicial deve conter The Best Ever como nome de jogador e 1000000 como pontuação.

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

2. Adicionar jogadores a um placar de recordes

Para adicionar um jogador ao placar de recordes, defina a função addPlayer. Ela aceita 3 parâmetros:

  • O primeiro parâmetro é um objeto de placar de recordes existente.
  • O segundo parâmetro é o nome de um jogador como uma string.
  • O terceiro parâmetro é a pontuação como um número.

A função retorna o mesmo objeto de placar que foi passado, depois de adicionar o novo jogador.

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

3. Remover jogadores de um placar de recordes

Se os jogadores violarem as regras do fliperama, eles são removidos manualmente do placar de recordes. Defina removePlayer, que recebe 2 parâmetros:

  • O primeiro parâmetro é um objeto de placar de recordes existente.
  • O segundo parâmetro é o nome do jogador como uma string.

Essa função deve remover a entrada do jogador em questão do placar e retornar o placar em seguida. Se o jogador não estava no placar desde o início, nada deve acontecer com o placar. Ele deve ser retornado como está.

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

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

4. Aumentar a pontuação de um jogador

Se um jogador termina outro jogo no fliperama, uma certa quantidade de pontos será adicionada à pontuação anterior no placar. Implemente updateScore, que recebe 3 parâmetros:

  • O primeiro parâmetro é um objeto de placar de recordes existente.
  • O segundo parâmetro é o nome do jogador cuja pontuação deve ser aumentada.
  • O terceiro parâmetro é a pontuação que você deseja adicionar ao recorde armazenado.

A função deve retornar o placar depois que a atualização for feita.

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

5. Aplicar os pontos de bônus de segunda-feira

O fliperama mantém um placar separado às segundas-feiras. No fim do dia, cada jogador nesse placar ganha 100 pontos adicionais.

Implemente a função applyMondayBonus, que aceita um placar. A função adiciona os pontos de bônus para cada jogador listado nesse placar. Depois, o placar é retornado.

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

applyMondayBonus(scoreBoard);
// => { 'Dave Thomas': 144, 'Freyja Ćirić': 639, 'José Valim': 365 }
Editar via GitHub O link abre em uma nova janela ou aba
JavaScript Exercism

Tudo pronto para começar Placar de Recordes?

Crie sua conta no Exercism para aprender e dominar JavaScript com 37 conceitos159 exercícios e mentoria humana de verdade, tudo de graça.