La estructura Set de JavaScript se usa para crear conjuntos, que son colecciones de objetos o de elementos de tipo primitivo como cadenas o números.
Contenidos
Qué es una estructura Set
La estructura de datos Set es un nuevo tipo de estructura que se agregó, al igual que la estructura Map, en la versión ES6 de JavaScript. La estructura Set es una colección de objetos o tipos primitivos, como pueden ser booleanos, números o cadenas.
A diferencia de la estructura Map, en la estructura Set los valores se usan como claves, por lo que sus valores serán únicos a la fuerza. El valor de cada elemento será siempre un elemento booleano con valor true
.
Cómo crear un conjunto Set
Estamos hablando de un objeto que dispone de su propio constructor, por lo que para crear un nuevo conjunto tendrás que usar la sentencia new
para invocar a su constructor:
const conjunto = new Set();
También puedes inicializar el conjunto con varios valores si le pasas un array al constructor con los elementos que quieres agregar al conjunto Set:
const conjunto = new Set(['a', 'b', 'c']);
Métodos de la estructura Set
A continuación vamos a ver cuáles son los métodos más utilizados de la estructura Set
.
Método add
Para agregar elementos a un conjunto Set debes usar el método add
, que aceptará un elemento como parámetro:
const conjunto = new Set();
conjunto.add('a');
conjunto.add('b');
Lamentablemente no podrás agregar más de un elemento al conjunto al mismo tiempo, por lo que en caso de agregar más de uno, tendrás que ejecutar el método add
varias veces.
Recuerda que los elementos del conjunto deben ser únicos, por lo que si agregas un elemento repetido, sencillamente se sobrescribirá el que ya existía, sin cambios aparentes.
Método has
El método has
se usa para comprobar si existe un elemento determinado en el conjunto Set:
const conjunto = new Set(['a', 'b', 'c']);
conjunto.has('b'); // true
conjunto.has('d'); // false
Método delete
El método delete
se usa para eliminar elementos de un conjunto Set:
const conjunto = new Set(['a', 'b', 'c']);
conjunto.delete('a');
conjunto.has('a'); // false
Método size
El método size
se usa para determinar el tamaño que tiene un conjunto Set. Es decir, que nos devolverá el número de elementos que contiene:
const conjunto = new Set(['a', 'b', 'c']);
conjunto.size(); // 3
Método clear
Mediante el método clear
podrás eliminar todos los elementos de un conjunto Set:
const conjunto = new Set(['a', 'b', 'c']);
conjunto.clear();
conjunto.size(); // 0
Método values
El método values
nos permite iterar los valores del conjunto mediante un iterador:
const conjunto = new Set(['a', 'b', 'c']);
for (const clave of conjunto.values()) {
console.log(clave);
}
Método keys
El método keys
también nos permite iterar los valores del conjunto Set mediante un iterador, siendo equivalente al método values
:
const conjunto = new Set(['a', 'b', 'c']);
for (const clave of conjunto.keys()) {
console.log(clave);
}
Método entries
El método entries
devuelve un iterador que nos permite recorrer el conjunto Set. Para avanzar por los elementos del conjunto, usaremos el método next
del iterador:
const conjunto = new Set(['a', 'b', 'c']);
const iterador = conjunto.entries();
console.log(iterador.next()); // {done: false, value: ["a", "a"]}
Cuando ejecutas el método next
del iterador, verás que devuelve un objeto que contiene la propiedad valor
con el valor de cada elemento y la propiedad done
, cuyo valor será false
hasta que el iterador finalice, que será cuando pase a tener el valor true
.
Método forEach
El bucle forEach
es un tipo de bucle de JavaScript que se ejecuta para cada uno de los elementos del conjunto Set:
const conjunto = new Set(['a', 'b', 'c']);
conjunto.forEach( (letra) => {
console.log(letra);
});
Cómo usar la estructura Set
A continuación vamos a ver cómo realizar las tareas más comunes que se suelen usar cuando trabajamos con conjuntos creados con la estructura Set:
Recorre los elementos de un conjunto Set
Para recorrer los elementos de un conjunto Set
puedes usar un bucle for de toda la vida:
const conjunto = new Set(['a', 'b', 'c']);
for (const letra of conjunto) {
console.log(letra);
}
Como ya hemos visto, también puedes usar un bucle forEach
:
const conjunto = new Set(['a', 'b', 'c']);
conjunto.forEach( (letra) => {
console.log(letra);
});
Además, también podrías recorrer sus elementos mediante un iterador con los métodos keys
o values
, tal y como ya hemos visto. O también usando el método entries
si recorres el iterador que devuelve:
const conjunto = new Set(['a', 'b', 'c']);
const iterador = conjunto.entries();
console.log(iterador.next()); // {done: false, value: ["a", "a"]}
console.log(iterador.next()); // {done: false, value: ["b", "b"]}
console.log(iterador.next()); // {done: false, value: ["c", "c"]}
Convierte un conjunto Set en un array
Convertir una estructura Set en un array es muy sencillo, ya que nos bastará con una sola línea de código. Primero debemos obtener sus valores y luego, usando el operador de propagación spread ...
, asignamos dichos valores a un nuevo array:
En este ejemplo obtenemos los valores usando el método keys
:
const conjunto = new Set(['a', 'b', 'c']);
const arr = [...conjunto.keys()];
En este otro ejemplo obtenemos los valores usando el método values
:
const conjunto = new Set(['a', 'b', 'c']);
const arr = [...conjunto.values()];
Conjuntos WeakSet
Los conjuntos WeakSet son un tipo especial de conjunto al que solamente se le pueden agregar objetos. Sus elementos pueden ser recogidos por el recolector de basura; algo que no ocurre con los conjuntos Set.
Un WeakSet se crea igual que con Set.
const conjunto = new WeakSet();
Para agregar elementos a un WeakSet se usa también la el método add
, aunque solamente se aceptan objetos:
const letras = new WeakSet();
letras.add({ nombre: 'a', tipo: 'vocal' });
letras.add({ nombre: 'b', tipo: 'consonante' });
letras.add({ nombre: 'c', tipo: 'consonante' });
Existen también otras limitaciones que afectan a los WeakSet. Por ejemplo, no es posible iterar sus elementos, ni obtener su número mediante el método size
ni usar el método clear
para eliminar todos sus elementos.
Los únicos elementos que usan con los conjuntos WeakSet son el método add
, el método has
y el método delete
.
Y esto ha sido todo.