Sets en javascript
Introducción
Comenzaremos hablando que son los sets y que operaciones podemos realizar con ellos. Trararé de explicar los conceptos e implementaciones de forma corta para no alargar el contenido.
¿Qué son los sets?
Son colecciones de datos únicos, esto quiere decir que una colección no puede tener dos o más valores repetidos.
Definiendo un set
Para definir un set en javascript solo necesitamos llamar al constructor de esta forma:
En la parte de arriba se puede observar como declarar un set vacío, también podemos definir el un set con la colección desde su instancia, el set recibe como parámetro un iterable, por ejemplo, un array, string o incluso otro set.
Convirtiendo un set en array
Es posible convertir un set en un array, utilizando el operador de propagación (spread operator) o usando el método from del objeto Array.
Propiedades y métodos
El objeto set contiene los siguientes métodos y propiedades:
Propidedad
- size (devuelve el tamaño de la colección)
Métodos
- add (agrega un nuevo elemento a la colección)
- has (devuelve true si un elemento existe en la colección)
- delete (elimina un elemento en la colección)
- clear (limpia la colección)
- values (devuelve un iterable con los valores de la colección)
- keys (devuelve un iterable con las claves de la colección)
- entries (devuelve un iterable con las claves/valores de la colección)
- forEach (recibe un callback que devuelve cada elemento de la colección)
A continuación algunos ejemplos de uso de los miembros de objeto set:
Iterables
Antes de continuar con los métodos restantes (values, keys, entries y forEach), debo mencionar que en los sets no son como los arrays. Los sets no contienen índices o posiciones, la clave de un elemento en el set es igual a su valor, por lo tanto los métodos keys() y values() devolveran el mismo resultado. De igual manera pondré los ejemplos para entenderlo mejor.
Operaciones con sets
Si alguna vez en la escuela viste “Teoría de conjuntos” en donde realizabas operaciones como unión, intersección, diferencia, etc. Son exactamente las mismas operaciones que se realizan con los sets, y si no te suena familiar, vamos a realizar algunas de las operaciones más comunes a continuación.
Unión
Como su nombre lo dice, es la unión de 2 o más colecciones sin repetir elementos en caso de que un mismo valor se encuentre en ambas colecciones, por ejemplo, si tenemos una colección A con los valores 1,2,3 y tenemos una colección B con los valores 2,3,4, el resultado de la unión de ambas colecciones sería: 1,2,3,4; los valores 2 y 3 se encuentran en ambas colecciones pero no se repiten los valores.
Implementación en código para obtener la unión:
Intersección
Todos los elementos en común que tienen las colecciones, como en el ejemplo anterior (A y B) y con los mismos valores, la intersección de A y B sería: 2,3; los elementos existen en ambas colecciones.
Implementación en código para obtener la intersección:
Diferencia
Es el conjunto de elementos que no existen en otros conjuntos, por ejemplo, la diferencia que tendría A de B (A-B) sería: 1, en pocas palabras, todos los elementos de A que no corresponden a B. La diferencia que tendría B de A (B-A) sería: 4.
Implementación en código para obtener la diferencia:
Conclusión
Los sets son útiles para almacenar datos únicos y realizar operaciones de comprobación, verificando si existe algún elemento en la colección y devolver una nueva colección con dichas operaciones, ya que los sets no contienen índices para obtener un único elemento, no es posible actualizar algún elemento de la colección como con los arrays.