Set en JavaScript

El objeto Set es una estructura de datos que permite almacenar valores únicos de cualquier tipo, ya sean primitivos u objetos. A diferencia de los arrays, un Set elimina automáticamente los valores duplicados, lo que lo convierte en una herramienta ideal para manejar colecciones de datos únicas de manera eficiente.

¿Qué es un Set en JavaScript?

Un Set es una colección ordenada de valores que asegura que cada elemento sea único. Esto significa que no puede contener dos elementos con el mismo valor, aunque estos valores pueden ser de cualquier tipo, incluidos objetos y funciones.

¿Por qué usar Set en lugar de un Array?

Aunque los arrays son muy versátiles, no eliminan automáticamente los valores duplicados y pueden ser menos eficientes en ciertas operaciones, como búsqueda o eliminación de elementos. Por esta razón Set es útil en escenarios como:

  • Eliminar duplicados en listas grandes.
  • Realizar operaciones de conjuntos (unión, intersección, diferencia).
  • Mantener datos únicos con búsquedas rápidas.

Sintaxis Básica:

const conjunto = new Set();

También se puede inicializar con un array de valores:

const conjunto = new Set([1, 2, 3, 4, 4]);
console.log(conjunto);
Set(4) { 1, 2, 3, 4 }

Propiedades y Métodos Principales de Set

El objeto Set incluye propiedades y métodos para gestionar fácilmente sus elementos.

Propiedad size

La propiedad size devuelve el número total de elementos únicos almacenados en el Set.

const conjunto = new Set([1, 2, 3, 3]);
console.log(conjunto.size);
3

A diferencia de los arrays, no necesitas preocuparte por duplicados ni escribir código adicional para contarlos.


Método add(value)

El método add permite añadir un valor al Set. Si el valor ya existe, no se añadirá nuevamente. Este método es ideal cuando necesitas construir una colección única de valores dinámicamente, como cuando recorres una lista de elementos.

const conjunto = new Set();
conjunto.add(10);
conjunto.add(20);
conjunto.add(10); // Ignorado porque ya existe

console.log(conjunto);
Set(2) { 10, 20 }

Método delete(value)

El método delete elimina un valor específico del Set. Devuelve true si el valor fue eliminado y false si no existía.

const conjunto = new Set();
conjunto.add(10);
conjunto.add(20);
conjunto.add(10);
conjunto.delete(10);

console.log(conjunto);
Set(1) { 20 }

Este método es eficiente para eliminar valores sin necesidad de recorrer manualmente toda la colección, como sucede con los arrays.


Método has(value)

El método has comprueba si un valor existe en el Set y devuelve un booleano (true o false). Es útil para verificar la existencia de un valor antes de realizar una operación, como agregarlo o eliminarlo.

const conjunto = new Set();
conjunto.add(10);
conjunto.add(20);
conjunto.add(10);

console.log(conjunto.has(20));
console.log(conjunto.has(30));
true
false

Método clear()

El método clear elimina todos los valores del Set reiniciándolo completamente. Es práctico cuando necesitas vaciar una colección temporal en lugar de crear un nuevo Set.

const conjunto = new Set();
conjunto.add(10);
conjunto.add(20);
conjunto.add(10);
conjunto.clear();

console.log(conjunto.size);

Operaciones de Conjunto con Set

Además de almacenar valores únicos, Set facilita la implementación de operaciones de conjunto comunes como unión, intersección y diferencia. Estas operaciones son esenciales en muchas aplicaciones matemáticas y algorítmicas.

Unión

La unión combina todos los valores únicos de dos conjuntos. Esto se logra utilizando el operador spread (...) para combinar los elementos de ambos Set. Es útil cuando necesitas combinar listas de datos sin duplicados, como registros de usuarios o productos en diferentes bases de datos.

const conjuntoA = new Set([1, 2, 3]);
const conjuntoB = new Set([3, 4, 5]);

const union = new Set([...conjuntoA, ...conjuntoB]);
console.log(union);
Set(5) { 1, 2, 3, 4, 5 }

Intersección

La intersección devuelve los valores que son comunes entre dos conjuntos. Esto se logra utilizando el método filter para comprobar qué valores de un conjunto existen en el otro. En aplicaciones prácticas, puedes usar la intersección para encontrar elementos compartidos entre dos grupos, como usuarios que pertenecen a dos listas de correos diferentes.

const conjuntoA = new Set([1, 2, 3]);
const conjuntoB = new Set([3, 4, 5]);

const interseccion = new Set(
  [...conjuntoA].filter((valor) => conjuntoB.has(valor))
);
console.log(interseccion);
Set(1) { 3 }

Diferencia

La diferencia devuelve los valores que están en un conjunto pero no en el otro. Esto es útil para identificar elementos únicos en un grupo. Es común en casos como detectar elementos que faltan en una lista o verificar datos eliminados.

const conjuntoA = new Set([1, 2, 3]);
const conjuntoB = new Set([3, 4, 5]);

const diferencia = new Set(
   [...conjuntoA].filter((valor) => !conjuntoB.has(valor))
);
console.log(diferencia);
Set(2) { 1, 2 }

Ejemplo Básico: Filtrar Palabras Únicas

Supongamos que necesitas identificar todas las palabras únicas en una oración. Con un Set, esto se logra de manera eficiente:

const texto = 'JavaScript es divertido, JavaScript es poderoso';
const palabras = texto.toLowerCase().split(/\W+/);

const unicas = new Set(palabras);
console.log(unicas);
Set(4) { 'javascript', 'es', 'divertido', 'poderoso' }

En casos como análisis de texto o procesamiento de datos, los Set permiten obtener resultados únicos con un código más simple.


Diferencias entre Set y Arrays

Aunque los arrays y los Set tienen características similares, sus diferencias clave determinan cuándo es mejor usar cada uno.

CaracterísticaSetArray
Valores ÚnicosNo
Eliminación de DuplicadosAutomáticaRequiere código adicional
Rendimiento en BúsquedaMejorMenos eficiente

Conclusión

El objeto Set en JavaScript es una herramienta poderosa para manejar datos únicos de manera eficiente. Desde eliminar duplicados hasta realizar operaciones de conjunto como unión e intersección, Set es una alternativa versátil a los arrays en muchos casos. Comprender sus métodos y usos te ayudará a escribir código más limpio, optimizado y profesional.

En el próximo artículo exploraremos WeakMap y WeakSet, estructuras de datos avanzadas que introducen conceptos como referencias débiles y gestión de memoria.

+1
0
+1
0