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.
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': '...',
};
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.
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';
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'];
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
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.
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.
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
Para agregar un jugador al tablero de puntajes máximos, define la función addPlayer.
Acepta 3 parámetros:
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}
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:
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 }
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:
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}
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 }
Regístrate en Exercism para aprender y dominar JavaScript con 37 conceptos159 ejercicios y mentoría humana real, todo gratis.