Sets en JavaScript: Guía Completa y Ejemplos Prácticos

  Sets en JavaScript

Un set es una colección de elementos únicos”. Podemos visualizar un set como un array en el que de alguna forma garantizamos que nunca hay elementos repetidos. Otra característica de los sets, es que los elementos no están ordenados de ninguna forma en particular, pero además de eso no hay mucho más que podamos decir desde el punto de vista de la estructura de datos en sí.

¿Qué Son y Cómo Usarlos?

En JavaScript, un Set es una estructura de datos que permite almacenar valores únicos de cualquier tipo, ya sea primitivo u objeto. A diferencia de los arreglos, los Sets no permiten elementos duplicados, lo que los hace ideales cuando necesitamos listas sin repeticiones.

¿Qué es un Set?

Un Set es un objeto que almacena elementos únicos y no mantiene un orden específico de inserción. Se pueden usar para evitar duplicados de manera eficiente y sencilla.

Crear un Set

Para crear un Set, utilizamos el constructor Set():

javascript
const mySet = new Set();

También podemos inicializar un Set con valores:

javascript
const colors = new Set(['red', 'green', 'blue']);
console.log(colors); 
// Salida: Set {'red', 'green', 'blue'}
  Propiedades y Métodos Comunes de los Sets

  1. add(value): Agrega un elemento al Set.
  2. delete(value): Elimina un elemento específico del Set.
  3. has(value): Verifica si un valor está en el Set.
  4. size: Retorna el número de elementos en el Set.
  5. clear(): Elimina todos los elementos del Set.

Ejemplos de Uso

1. Agregar Elementos add(value):

Agrega un elemento al Set. Si el valor ya existe, no se agregará de nuevo.

javascript
const mySet = new Set();
mySet.add(1);
mySet.add(2);
mySet.add(1); // Este valor no se agregará porque ya existe
console.log(mySet); 
// Salida: Set {1, 2}

2. Eliminar Elementos delete(value)

Elimina un elemento específico del Set. Si el valor existe, se elimina; si no existe, el Set permanece igual.

javascript
mySet.delete(1);
console.log(mySet); // Set {2}

3. Comprobar Existencia (has(value))

Verifica si un valor está en el Set, devolviendo true o false.

javascript
const names = new Set(['Alice', 'Bob', 'Charlie']);
console.log(names.has('Alice')); // true
console.log(names.has('Eve')); // false

4. Tamaño del Set size

Retorna el número de elementos en el Set.

javascript
console.log(mySet.size); // 1

5. Vaciar el Set clear()

Elimina todos los elementos del Set, dejándolo vacío.

javascript
mySet.clear();
console.log(mySet); // Set {}

Eliminar elementos duplicados del Array

Una forma rápida de eliminar duplicados de un arreglo es convirtiéndolo a un Set y luego de vuelta a un arreglo.

javascript
const numbers = [1, 2, 3, 3, 4, 4, 5];
const uniqueNumbers = [...new Set(numbers)];
console.log(uniqueNumbers); 
// Salida: [1, 2, 3, 4, 5]
  Explicación

Convertimos el Array a un Set para eliminar duplicados y luego usamos el operador de propagación (…) para convertirlo de nuevo a un Array.

Cómo Iterar un Objeto Set en JavaScript

Puedes iterar sobre un Set utilizando for...of o el método forEach(). Ambos permiten acceder a cada elemento del Set.

javascript
const fruits = new Set(['apple', 'banana', 'mango']);

for (const fruit of fruits) {
console.log(fruit);
}

// También se puede usar forEach
fruits.forEach(fruit => console.log(fruit));

// Salida:
// apple
// banana
// mango
  Explicación

Aquí, usamos for...of y el método forEach() para recorrer cada fruta en el Set y mostrarla en la consola.

Relación con Objetos Array

Los Sets y los Arrays son ambos estructuras de datos, pero los Sets no permiten duplicados, mientras que los Arrays sí.

javascript
const myArray = [1, 2, 2, 3];
const mySet = new Set(myArray);

console.log(mySet); 
// Salida: Set {1, 2, 3}

Explicación: Al convertir un Array en un Set, se eliminan automáticamente los duplicados, resultando en un conjunto único de elementos.

Relación con Strings

Los Sets pueden almacenar caracteres únicos de una cadena, lo que es útil para encontrar caracteres distintos.

javascript
const str = "hello";
const charSet = new Set(str);

console.log(charSet); // Salida: Set {'h', 'e', 'l', 'o'}
  Explicación

Al crear un Set a partir de una cadena, cada carácter se convierte en un elemento del Set, eliminando duplicados automáticamente.

Usar Set para Garantizar la Unicidad de una Lista de Valores

Los Sets son ideales para asegurar que los elementos de una lista sean únicos.

javascript
const userIds = new Set();
userIds.add('user1');
userIds.add('user2');
userIds.add('user1'); // Este duplicado no se añadirá

console.log(userIds); // Salida: Set {'user1', 'user2'}
  Explicación

Al agregar usuarios a un Set, automáticamente se evitan duplicados, asegurando que cada ID de usuario sea único.

Convertir a Arrays

Los Sets se pueden convertir fácilmente en Arrays usando el operador de propagación o el método Array.from().

javascript
const mySet = new Set([1, 2, 3]);
const arrayFromSet1 = [...mySet];
const arrayFromSet2 = Array.from(mySet);

console.log(arrayFromSet1); // Salida: [1, 2, 3]
console.log(arrayFromSet2); // Salida: [1, 2, 3]
  Explicación

Ambas técnicas convierten un Set en un Array, permitiendo que se utilicen métodos de Array adicionales.

Unión de Dos Set en JavaScript

Puedes combinar dos Sets en uno nuevo utilizando el operador de propagación.

javascript
const setA = new Set([1, 2, 3]);
const setB = new Set([3, 4, 5]);
const union = new Set([...setA, ...setB]);

console.log(union); 
// Salida: Set {1, 2, 3, 4, 5}
  Explicación

Al usar el operador de propagación, unimos los elementos de ambos Sets en un nuevo Set, manteniendo la unicidad de los elementos.

Intersección de Dos Sets en JavaScript

La intersección de dos Sets consiste en crear un nuevo Set que contenga solo los elementos que están presentes en ambos Sets.

javascript
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([3, 4, 5, 6]);
const intersection = new Set([...setA].filter(value => setB.has(value)));

console.log(intersection); 
// Salida: Set {3, 4}
  Explicación

Al utilizar el método filter(), verificamos qué elementos de setA también están presentes en setB y creamos un nuevo Set con esos elementos, resultando en la intersección.

Diferencia de Dos Sets en JavaScript

La diferencia de dos Sets genera un nuevo Set que contiene los elementos que están en el primer Set pero no en el segundo.

javascript
const setA = new Set([1, 2, 3, 4]);
const setB = new Set([3, 4, 5, 6]);
const difference = new Set([...setA].filter(value => !setB.has(value)));

console.log(difference); 
// Salida: Set {1, 2}
  Explicación

Usamos filter() para obtener los elementos de setA que no están en setB, creando así un nuevo Set que representa la diferencia entre ambos.

  Ventajas de Usar Sets

Eficiencia al evitar duplicados: En lugar de verificar manualmente la existencia de un elemento, los Sets gestionan esto automáticamente. Operaciones de conjuntos: La estructura permite realizar operaciones de conjuntos fácilmente, algo que los arrays no logran de forma eficiente. Rapidez en comprobación y eliminación: Los métodos has y delete en Sets son eficientes para verificar y eliminar elementos en comparación con los arrays.

  Conclusión

Los Sets en JavaScript son una herramienta poderosa cuando necesitamos manejar listas de valores únicos o realizar operaciones de conjuntos. Son simples de usar y brindan un rendimiento excelente para la eliminación de duplicados y la gestión de grandes colecciones de datos.