ES6 - Mapas y conjuntos

ES6 presenta dos nuevas estructuras de datos: maps y sets. Aprendamos sobre ellos en detalle.

Mapas

Un mapa es una colección ordenada de key-value pairs. Los mapas son similares a los objetos. Sin embargo, existen algunas diferencias entre mapas y objetos. Estos se enumeran a continuación:

No Señor Objeto Mapa
1 Las claves no pueden ser de tipo Objeto Las claves pueden ser de cualquier tipo
2 Las llaves no están ordenadas Se ordenan las llaves
3 no iterable iterable

Sintaxis

La sintaxis de Map se proporciona a continuación:

let map = new Map([iterable])
let map = new Map()

Ejemplo

El siguiente ejemplo crea un mapa utilizando un constructor iterable:

<script>
   let andy = {ename:"Andrel"},
      varun = {ename:"Varun"},
      prijin = {ename:"Prijin"}
   let empJobs = new Map([
   [andy,'Software Architect'],
   [varun,'Developer']]
   );
   console.log(empJobs)
</script>

La salida del código anterior es como se muestra a continuación:

{{…} => "Software Architect", {…} => "Developer"}

Comprobando el tamaño del mapa

La propiedad de tamaño se puede utilizar para determinar el número de valores almacenados en el mapa.

Sintaxis

La sintaxis para verificar el tamaño del mapa se da a continuación:

map_name.size

Ejemplo

<script>
   let daysMap = new Map();
   daysMap.set('1', 'Monday');
   daysMap.set('2', 'Tuesday');
   daysMap.set('3', 'Wednesday');
   console.log(daysMap.size);
</script>

La salida del código anterior es como se muestra a continuación:

3

A continuación se muestran algunos métodos comunes que se pueden utilizar para manipular mapas:

No Señor Objeto y mapa
1 set (clave, valor)

Agrega clave y valor al mapa

2 obtener la clave)

Devuelve el valor si la clave coincide

3 tiene (clave)

Devuelve verdadero si existe un elemento con la clave especificada; más devuelve falso

4 llaves()

Devuelve un iterador que contiene las claves para cada elemento en el objeto de mapa.

5 valores()

Devuelve un iterador que contiene los valores de cada elemento en el objeto de mapa.

6 entradas ()

Devuelve un iterador que contiene los pares clave-valor para cada elemento en el mapa.

7 borrar (clave)

Elimina el elemento especificado de un objeto Map

WeakMap

WeakMap es un pequeño subset of map. Las claves tienen una referencia débil, por lo que solo pueden ser no primitivas. Si no hay ninguna referencia a las claves del objeto, estará sujeto a la recolección de basura.

  • no iterable
  • cada clave es un tipo de objeto

WeakMap permitirá la recolección de basura si la clave no tiene ninguna referencia.

Sintaxis

La sintaxis de WeakMap se indica a continuación:

new WeakMap([iterable])

Ejemplo 1

<script>
   let emp = new WeakMap();
   emp.set(10,'Sachin');// TypeError as keys should be object
</script>

Ejemplo 2

<script>
   let empMap = new WeakMap();
   // emp.set(10,'Sachin');// Error as keys should be object
   let e1= {ename:'Kiran'},
      e2 = {ename:'Kannan'},
      e3 = {ename:'Mohtashim'}

   empMap.set(e1,1001);
   empMap.set(e2,1002);
   empMap.set(e3,1003);

   console.log(empMap)
   console.log(empMap.get(e2))
   console.log(empMap.has(e2))
   empMap.delete(e1)
   console.log(empMap)
</script>

La salida del código anterior es la que se menciona a continuación:

{{…} => 1002, {…} => 1003, {…} => 1001}
1002
true
{{…} => 1002, {…} => 1003}

Conjunto

Un conjunto es una colección desordenada de valores únicos. Esta estructura de datos puede contener valores de tipos primitivos y de objeto.

Sintaxis

La sintaxis de Set se da a continuación:

new Set([iterable])
new Set()

Ejemplo

<script>
   let names = new Set(['A','B','C','D']);
   console.log(names)
</script>

La salida del código anterior es la que se muestra a continuación:

{"A", "B", "C", "D"}

Comprobación del tamaño de un conjunto

La propiedad de tamaño del objeto Conjunto se puede utilizar para consultar el número de elementos del Conjunto.

Sintaxis

La sintaxis para verificar el tamaño de un conjunto se menciona a continuación:

set.size

Ejemplo

<script>
   let names = new Set(['A','B','C','D']);
   console.log(names.size)
</script>

La salida del código anterior es la que se muestra a continuación:

4

Iterando un conjunto

Podemos usar el forEach y for..ofbucles para iterar a través de un conjunto. Esto se muestra en el siguiente ejemplo:

Ejemplo

<script>
   let names= new Set(['A','B','C','D']);
   //iterate using forEach
   console.log('forEach')
   names.forEach(n=>console.log(n))
   
   console.log('for of..')
   
   //iterate using for..of
   for(let n of names){
      console.log(n)
   }
</script>

La salida del código anterior es la que se menciona a continuación:

forEach
A
B
C
D
for of..
A
B
C
D

Los siguientes métodos se pueden utilizar para manipular un conjunto:

No Señor Objeto y mapa
1 agregar (elemento)

Agrega un elemento al conjunto

2 tiene (elemento)

Devuelve verdadero si se encuentra el elemento; más devuelve falso

3 eliminar (elemento)

Eliminar elemento específico del conjunto

4 claro()

Borra todos los elementos del conjunto

Débil

Un Weakset contiene objetos débilmente, eso significa que los objetos almacenados en un WeakSet están sujetos a recolección de basura, si no se hace referencia a ellos. WeakSets no son iterables y no tienen laget método.

<script>

   let e1 = {ename:'A'}
   let e2 ={ename:'B'}
   let e3 ={ename:'C'}

   let emps = new WeakSet();
   emps.add(e1);
   emps.add(e2)
   .add(e3);

   console.log(emps)
   console.log(emps.has(e1))
   emps.delete(e1);
   console.log(emps)
</script>

La salida del código anterior será la que se menciona a continuación:

WeakSet {{…}, {…}, {…}}
true
WeakSet {{…}, {…}}