Los Sets en JavaScript son estructuras de datos que permiten almacenar colecciones de valores únicos.
Esta característica los hace útiles cuando necesitamos garantizar la unicidad de los elementos (por ejemplo, para eliminar duplicados de un array).
Los Sets pueden almacenar cualquier tipo de dato, incluyendo primitivos como números y cadenas, así como objetos.
Sus características principales son,
- Valores únicos: No permite duplicados. Si intentas añadir un elemento que ya existe, simplemente será ignorado.
- Tipos de datos: Puedes almacenar cualquier tipo de valor, incluidos objetos y otros Sets.
- Orden de inserción: Los Set mantienen el orden de inserción de los valores.
Si quieres aprender más sobre Sets (también llamados HashSet)
consulta el Curso de Estructuras de Datos leer más ⯈
Creación de un Set
Para crear un Set, utilizamos el constructor Set()
:
const miSet = new Set();
console.log(miSet); // Set(0) {}
También podemos inicializar un Set pasando un Array (u otro iterable) como argumento al constructor:
const numeros = new Set([1, 2, 3, 4, 5]);
console.log(numeros); // Set(5) {1, 2, 3, 4, 5}
Si un iterable contiene valores duplicados, el Set automáticamente los elimina:
const duplicados = new Set([1, 2, 2, 3, 4, 4]);
console.log(duplicados); // Set(4) {1, 2, 3, 4}
Operaciones básicas
Añadir elementos
Para agregar elementos a un Set, utilizamos el método .add()
. Si intentamos agregar un elemento que ya existe, no se generará un error, pero el Set ignorará el intento.
const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(1); // Ignorado
console.log(mySet); // Output: Set { 1, 2 }
Verificar existencia de elementos
Para comprobar si un elemento está presente en un Set, utilizamos el método .has()
, que devuelve un valor booleano:
console.log(mySet.has(1)); // Output: true
console.log(mySet.has(3)); // Output: false
Eliminar elementos
Podemos eliminar elementos de un Set utilizando el método .delete()
. Si el elemento no existe, el método no generará error, simplemente no hará nada.
mySet.delete(2);
console.log(mySet); // Output: Set { 1 }
Vaciar el Set
Si queremos eliminar todos los elementos de un Set, podemos utilizar el método .clear()
:
mySet.clear();
console.log(mySet); // Output: Set {}
Obtener el tamaño del Set
La propiedad .size
devuelve el número de elementos en el Set:
const numeros = new Set([1, 2, 3]);
console.log(numeros.size); // 3
No se puede acceder por índice
A diferencia de los arrays, no podemos acceder a los elementos de un Set mediante un índice. Solo podemos usar métodos de iteración para acceder a sus valores.
Recorrer un Set
Los Sets son iterables, lo que significa que podemos recorrer sus elementos utilizando un bucle for...of
, el método .forEach()
, o convertirlos a un array.
Con un bucle for...of
const mySet = new Set(['a', 'b', 'c']);
for (const item of mySet) {
console.log(item); // Output: a, b, c
}
Usando .forEach()
mySet.forEach((value) => {
console.log(value); // Output: a, b, c
});
Convertir a array
Podemos convertir un Set a un array utilizando el operador de propagación (...
) o el método Array.from()
:
const arrayFromSet = [...mySet]; // Con operador de propagación
const anotherArrayFromSet = Array.from(mySet); // Con Array.from()
console.log(arrayFromSet); // Output: [ 'a', 'b', 'c' ]
Combinación de Sets
Unir dos Sets
Aunque no existe un método directo para unir Sets, podemos usar el operador spread:
const set1 = new Set([1, 2, 3]);
const set2 = new Set([3, 4, 5]);
const union = new Set([...set1, ...set2]);
console.log(union); // Set(5) {1, 2, 3, 4, 5}
Intersección de Sets
La intersección de dos Sets consiste en los elementos que están en ambos:
const interseccion = new Set([...set1].filter((x) => set2.has(x)));
console.log(interseccion); // Set(1) {3}
Diferencia de Sets
La diferencia entre dos Sets consiste en los elementos que están en uno pero no en el otro:
const diferencia = new Set([...set1].filter((x) => !set2.has(x)));
console.log(diferencia); // Set(2) {1, 2}
Ejemplos prácticos
Eliminar duplicados de un array
Uno de los usos más comunes de los Set es eliminar duplicados de un array:
const numeros = [1, 2, 2, 3, 4, 4, 5];
const unicos = [...new Set(numeros)];
console.log(unicos); // [1, 2, 3, 4, 5]
Comprobar valores únicos
Podemos usar un Set para verificar si todos los valores de un array son únicos:
const valores = [1, 2, 3, 4, 4];
const esUnico = valores.length === new Set(valores).size;
console.log(esUnico); // false
Contar elementos únicos
Los Set son útiles para contar cuántos valores únicos hay en una colección:
const colores = ["rojo", "verde", "azul", "rojo", "amarillo"];
const setColores = new Set(colores);
console.log(setColores.size); // 4
Gestión de listas dinámicas
Los Set son ideales para manejar listas de elementos dinámicos, como usuarios en línea:
const usuariosEnLinea = new Set();
usuariosEnLinea.add("usuario1");
usuariosEnLinea.add("usuario2");
usuariosEnLinea.delete("usuario1");
console.log(usuariosEnLinea); // Set(1) {"usuario2"}