Colecciones Sets
En JavaScript, un Set es una colección de valores únicos, lo que significa que no puede contener valores duplicados. Esto es útil cuando necesitas almacenar una lista de elementos y asegurarte de que cada uno aparezca solo una vez.
1. Qué es un Set? #
Un Set es un tipo de colección que te permite almacenar cualquier tipo de valor, como números, cadenas de texto, objetos, y más, pero solo almacena valores únicos.
Ejemplo básico de un Set:
1let numeros = new Set([1, 2, 3, 3, 4]); 2console.log(numeros); // Muestra {1, 2, 3, 4}, sin duplicadosSalida de consola Set(4) { 1, 2, 3, 4 }
En este ejemplo:
- Aunque se intenta agregar dos veces el número
3, solo se mantiene una copia de él en elSet.
¿Cómo se crea un Set? #
Puedes crear un Set usando el constructor Set(), que puede tomar un array o cualquier otro iterable como argumento.
Ejemplo:
1let miSet = new Set(); // Crea un Set vacío 2 3miSet.add(1); // Agrega el valor 1 4miSet.add(5); // Agrega el valor 5 5miSet.add(1); // Intento de agregar el valor 1 otra vez, no se duplica 6 7console.log(miSet); // Muestra {1, 5}Salida de consola Set(2) { 1, 5 }
Métodos y propiedades de los Set #
-
add():- Agrega un nuevo valor al
Set. - Ejemplo:
1let miSet = new Set([1, 5]); // Crea un Set con valores iniciales 2miSet.add(10); 3console.log(miSet); // Muestra {1, 5, 10}Salida de consola Set(3) { 1, 5, 10 }
- Agrega un nuevo valor al
-
delete():- Elimina un valor específico del
Set. - Ejemplo:
1let miSet = new Set([1, 5, 20]); // Crea un Set con valores iniciales 2miSet.delete(5); 3console.log(miSet); // Muestra {1, 20}Salida de consola Set(2) { 1, 20 }
- Elimina un valor específico del
-
has():- Verifica si un valor existe en el
Set. - Ejemplo:
1let miSet = new Set([1, 10]); // Crea un Set con valores iniciales 2console.log(miSet.has(10)); // true 3console.log(miSet.has(5)); // falseSalida de consola true false
- Verifica si un valor existe en el
-
clear():- Elimina todos los valores del
Set. - Ejemplo:
1let miSet = new Set([1, 10]); // Crea un Set con valores iniciales 2miSet.clear(); 3console.log(miSet); // Muestra un Set vacío {}Salida de consola Set(0) {}
- Elimina todos los valores del
-
size:- Devuelve el número de elementos en el
Set. - Ejemplo:
1let frutas = new Set(["🍎 Manzana", "🍊 Naranja", "🍒 Cereza"]); 2console.log(frutas.size); // Muestra 3Salida de consola 3
- Devuelve el número de elementos en el
Iteración sobre un Set #
Puedes usar varias formas de iterar sobre los elementos de un Set.
-
forEach():- Ejecuta una función para cada valor en el
Set. - Ejemplo:
1let frutas = new Set(["🍎 Manzana", "🍊 Naranja", "🍒 Cereza"]); 2 3frutas.forEach((fruta) => { 4 console.log(fruta); 5}); 6// Muestra "Manzana", "Banana", "Cereza"Salida de consola 🍎 Manzana 🍊 Naranja 🍒 Cereza
- Ejecuta una función para cada valor en el
-
for...of:- También puedes usar el bucle
for...ofpara iterar sobre los valores. - Ejemplo:
1let frutas = new Set(["🍎 Manzana", "🍊 Naranja", "🍒 Cereza"]); 2 3for (let fruta of frutas) { 4 console.log(fruta); 5} 6// Muestra "Manzana", "Banana", "Cereza"Salida de consola 🍎 Manzana 🍊 Naranja 🍒 Cereza
- También puedes usar el bucle
Diferencias entre Set y Arrays #
Aunque los Set y los arrays son colecciones de valores, hay algunas diferencias clave:
- Valores únicos: Un
Setno permite valores duplicados, mientras que los arrays sí. - Orden: Los elementos de un
Setno tienen un índice (no puedes acceder a un elemento por su posición como en un array). - Métodos: Los
Settienen métodos específicos comoadd(),has(), ydelete()que no están disponibles en los arrays.
Ejemplo de comparación:
1let array = [1, 2, 2, 3]; 2let set = new Set([1, 2, 2, 3]); 3 4console.log(array); // Muestra [1, 2, 2, 3], con duplicados 5console.log(set); // Muestra {1, 2, 3}, sin duplicadosSalida de consola [ 1, 2, 2, 3 ] Set(3) { 1, 2, 3 }
Resumen del tema
Conceptos clave #
- Colección de Valores Únicos: objeto iterable que prohíbe duplicados por igualdad estricta (algoritmo SameValueZero).
- API Principal:
add(valor): añade un elemento (encadenable).has(valor): comprobación de existencia con complejidad .delete(valor)yclear(): eliminación selectiva o vaciado total.size: propiedad con la cantidad actual de elementos únicos.
- Diferencia con Arrays: no admite indexación numérica (
set[0]esundefined), pero se itera confor...ofoforEach(). - Patrón Común: eliminar duplicados de un array con
[...new Set(array)].
Qué debes recordar #
Usa Set para almacenar elementos sin duplicados y realizar búsquedas de pertenencia ultra rápidas con .has().