En el capítulo anterior hablábamos sobre los símbolos, los cuales nos permitían crear propiedades privadas dentro de un objeto. En este capítulo vamos a ver una estructura denominada Set. Este nuevo tipo de dato Set es una estructura similar a un Array pero la diferencia con éste es que se trata de una estructura de datos únicos. Se trata por tanto de un Array Javascript mejorado, que sólo acepta valores únicos, hablando de valores primitivos, porque si le pasamos objetos, en la memoria de Javascript, cada objeto es una referencia única.
Crear un Set
Vamos a hacer un ejm para entenderlo mejor.
Ejm
const set = new Set([1,2,3,3,4,true,false,false]); console.log(set); // No imprimirá valores duplicados
El número 3 sólo aparecerá una sola vez, al igual que el valor false.
Agregar valores a un Set
Para ello tenemos el método add(), de la siguiente manera.
Ejm
const set = new Set(); set.add(1); set.add(1); set.add({}); console.log(set); console.log(set.size);
Recorrer los elementos de un Set
Los elementos de un Set los podemos recorrer de varias maneras, mediante un loop forof o un bucle forEach, de la siguiente forma.
Ejm con forof
for(item of set) { console.log(item); } // Imprime los elementos
Ejm con for Each
set.forEach(item => { console.log(item); });
Acceder a una posición específica
El constructor Array tiene un tipo de método denominado from() que permite convertir un tipo de dato iterable (el tipo de dato que permite contar sus elementos, como son una cadena de texto, un Array o un objeto), en nuestro caso un tipo de dato Set (que también es iterable pero con características distintas a los demás tipos) en un Array, de la siguiente forma.
Ejm
console.log(Array.from(set[o]));
Acabamos de transformar nuestra variable set (que es un tipo de dato Set) en un elemento iterable de tipo Array, por lo que podemos acceder a cada uno de los items de dicho Array.
Ejm
const arr = Array.from(set); console.log(arr[0]);
Tenemos que guardar el Array que estamos creando en una variable, sino dará error.
Nota: el tipo de dato Set es un objeto, aunque tiene características de un Array.
Volvemos a tener la propiedad length en vez de la propiedad size que se utiliza en los Sets.
Nota: Los bucles forof y forEach funcionan con Sets porque ya vienen implementados para ello.
Eliminar valores
Los Sets tienen un método especial para eliminar valores. Es el método delete(). Veamos un ejm.
Ejm
set.delete(1); // Elimina el valor 1 de nuestro Set de valores
Comprobar valores
Tenemos un método denominado has() que comprueba si el valor existe en nuestro Set. Veamos un ejm.
Ejm
console.log(set.has(1)); // Devuelve true si existe el valor 1, y false en caso contrario
Limpiar un Set
Existe un método para limpiar un Set, veamos un ejm.
Ejm
set.clear(); // Elimina todos los elementos del Set set console.log(set);
Resumen
Los métodos que podemos utilizar con el tipo de dato Set son los siguientes:
- add(): agrega un valor a un Set.
- delete(): elimina un valor de un Set.
- clear(): limpia un Set.
- has(): comprueba si existe un valor en un Set.
- from(): para transformar un Set en un Array (hay que guardar la transformación en una variable)
Nota: Las posibilidades de uso de este tipo de dato pueden ser varias. Con los Sets podemos no duplicar valores, como pueden ser emails, teléfonos, DNIs…