La estructura Set en JavaScript

Javascript

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.

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.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”