Introducción a los conjuntos en JavaScript

Un Conjunto es un tipo especial de objeto en ES6 que le permite crear una colección de valores únicos. Cada valor aparece solo una vez en el conjunto. Los valores almacenados en un conjunto pueden ser tipos primitivos (cadenas, números, valores booleanos) u objetos (objetos literales, matrices).

Inicializar un conjunto

Puedes usar el Set() constructor para crear un conjunto vacío:

const birds = new Set();

Alternativamente, puede pasar un objeto iterable (como una matriz) al constructor para inicializar el conjunto. Todos los elementos del iterable se agregarán al nuevo conjunto:

const birds = new Set(['🐦', '🦉', '🦆', '🦅']);

Dado que las cadenas son iterables, también se pueden pasar para crear un conjunto:

const fruits = new Set('🍒🍇🍉🍓🍑');

Si el objeto iterable contiene elementos duplicados, se eliminarán automáticamente. Obtenga más información sobre cómo eliminar duplicados de una matriz usando un Set en esta guía.

Establecer métodos

Algunos de los métodos que puedes usar en un Set objeto son add() , has() , size , delete() y clear() :

const birds = new Set();

// add items
birds.add('🐦');
birds.add('🦉');
birds.add('🦆');
birds.add('🦅');

// check if item exists
birds.has('🦉'); // true
birds.has('🐥'); // false

// get items count
birds.size; // 4

// delete item
birds.delete('🦆'); // true
birds.delete('🦆'); // false - already deleted

// delete all items
birds.clear();

Dado que un conjunto solo puede almacenar valores únicos, llamar a add() con el mismo valor varias veces no se agregarán elementos nuevos:

const birds = new Set();
birds.add('🐦');
birds.add('🐦');
birds.add('🐦');

birds.size; // 1

console.log(birds); // Set(1) {"🐦"}

Objetos en Conjunto

También podemos poner diferentes tipos de objetos como objetos literales, matrices, fechas, etc. en el conjunto:

const set = new Set(['🦉', '🌹']);

set.add(['🦉', '🍌']);
set.add({ name: 'John Doe', planet: 'Earth' });
set.add(new Date());

set.forEach(value => {
    console.log(value);
});

// 🦉
// 🌹
// ["🦉", "🍌"]
// {name: "John Doe", planet: "Earth"}
// Thu May 16 2019 12:47:09 GMT+0100

Iterando sobre Conjuntos

Puedes usar forEach() para iterar sobre conjuntos:

const flowers = new Set(['🌷', '🌹', '🌻', '🌸']);

flowers.forEach(flower => {
    console.log(`Hey ${flower}!`)
});

// Hey 🌷!
// Hey 🌹!
// Hey 🌻!
// Hey 🌸!

También puedes usar for...of bucle para iterar sobre conjuntos:

for (const flower of flowers) {
    console.log(flower);
}

Claves y valores

Los conjuntos también tienen keys() y values() métodos como Maps. La única excepción es el keys() el método es solo un alias de values() método. Ambos devuelven un nuevo objeto iterador con los valores en el mismo orden en que se agregaron al conjunto. También podemos usar estos métodos para iterar sobre el conjunto:

const fruits = new Set('🍒🍇🍉🍓🍑');

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

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

También podemos usar el iterador para iterar sobre los valores establecidos uno por uno como se muestra a continuación:

const fruits = new Set('🍒🍇🍉');
const items = fruits.values();

console.log(items.next()); // {value: "🍒", done: false}
console.log(items.next()); // {value: "🍇", done: false}
console.log(items.next()); // {value: "🍉", done: true}

Llamando next() devuelve cada elemento como un {value: <value>, done: <boolean>} objeto hasta que finalice el iterador, momento en el que done es true . Los conjuntos tienen otro método llamado entries() que también devuelve un iterador pero el valor se repite dos veces:

const fruits = new Set('🍒🍇🍉');
const items = fruits.entries();

console.log(items.next()); // {value: ["🍒", "🍒"], done: false}

Conclusión

Los conjuntos son un nuevo tipo de objeto introducido en ES6 que le permite crear colecciones de valores. Un valor puede ser una primitiva o un objeto y puede ocurrir solo una vez en el conjunto; es único en la colección. Puede iterar a través de los valores en el orden en que se insertaron en el conjunto.

Si desea obtener más información, consulte nuestra guía sobre mapas en JavaScript.