Los Maps son objetos que sirven para almacenar conjuntos de valores asociados a manera de objetos. Es como si fuera un objeto primitivo, y tiene algunas características con muy poco uso que iremos viendo.
Crear un Map
La sintaxis a utilizar es la siguiente.
Ejm
let mapa = new Map();
La manera como se obtienen y estableces valores de un Map es muy similar a los getters y setters de una clase orientada a objetos.
Agregar valores
Exiten dos formas de agregar valores.
Ejm
mapa.set("nombre","Francisco"); mapa.set("apellido","Paredes"); mapa.set("Edad":51); // Pide una llave (clave) y un valor console.log(mapa);
Número de elementos
Para saber el número de elementos que tiene un Map, utilizamos la propiedad size, al igual que con los Sets.
Ejm
console.log(mapa.size);
Comprobar si existe o no una llave
Utilizamos, al igual que con los Sets, el método has(). Lo hacemos utilizando la siguiente metodología.
Ejm
console.log(mapa.has("email")); // Devuelve false porque no está creada dicha llave
Leer un solo valor
Para ello tenemos el método get(), de la siguiente forma.
Ejm
console.log(mapa.get("nombre")); // El parámetro es el nombre de la llave que queremos obtener
Sobreescribir valores
Lo hacemos con el método set() de la siguiente forma.
Ejm
mapa.set("nombre", "Fran");
Eliminar elementos de un Map
Para ello utilizamos el método delete(). Veamos la sintaxis.
Ejm
mapa.delete("apellido"); // Elimina la llave apellido
Recorrer un Map
Al ser un elemento iterable podemos utilizar un forof o un forEach. Veamos un ejm.
Ejm
for(let [key, value] of mapa) { console.log(`Llave: ${key} - Valor: ${value}`); }
Las llaves no han de ser cadenas de texto
Distinto a como ocurre en un objeto normal, con los Maps podemos generar llaves que no sean cadenas de texto. Pueden ser un objeto, un Array, undefined, null, NaN… En la práctica no es aconsejable utilizar este tipo de llaves. Veamos un ejm.
Ejm
mapa.set(19, "Diecinueve"); mapa.set(false, "false"); mapas.set({},{});
Un uso de los Maps es por ejm guardar una colección de datos que puedan estar relacionados, como pueden ser un catálogo
Nota: tanto los Sets como los Maps son tipos de datos complejos, mientras que los Symbols son tipos de datos primitivos.
Inicializar valores
Además del método set(), tenemos una segunda manera, veamos su sintaxis.
Ejm
const mapa2 = new Map([ ["nombre", "Francisco"], ["apellido", "Paredes"], ["edad", 51],[null, «nulo»]
]) console.log(mapa2);
Almacenar llaves y valores
Podríamos en un Array por un lado almacenar la lista de las llaves, y en otro Array almacenar la lista de los valores. Lo podemos hacer gracias a la destructuración y a keys y values. Veamos un ejm.
Ejm
const llavesMapa2 = [...mapa2.keys()]; const valoresMapa2 = [...mapa2.values()]; console.log(llavesMapa2, valoresMapa2);
Nota: los Sets se parecen más a los Arrays mientras que los Maps se parecen más a los objetos.