En este tutorial, aprenderá sobre JavaScript Sets y WeakSets con la ayuda de ejemplos.
JavaScript ES6 ha introducido dos nuevas estructuras de datos, es decir, Sety WeakSet.
Conjunto es similar a una matriz que nos permite almacenar varios elementos como números, cadenas, objetos, etc. Sin embargo, a diferencia de una matriz, un conjunto no puede contener valores duplicados.
Crear conjunto de JavaScript
Para crear un Set, necesitas usar el new Set()constructor. Por ejemplo,
// create Set const set1 = new Set(); // an empty set console.log(set1); // Set () // Set with multiple types of value const set2 = new Set((1, 'hello', (count : true))); console.log(set2); // Set (1, "hello", (count: true))
Cuando se pasan valores duplicados a un Setobjeto, los valores duplicados se excluyen.
// Set with duplicate values const set3 = new Set((1, 1, 2, 2)); console.log(set3); // Set (1, 2)
Elementos del conjunto de acceso
Puede acceder a los Setelementos usando el values()método y verificar si hay un elemento dentro Setusando el has()método. Por ejemplo,
const set1 = new Set((1, 2, 3)); // access the elements of a Set console.log(set1.values()); // Set Iterator (1, 2, 3)
Puede utilizar el has()método para comprobar si el elemento está en un conjunto. Por ejemplo,
const set1 = new Set((1, 2, 3)); // check if an element is in Set console.log(set1.has(1));
Adición de nuevos elementos
Puede agregar elementos a un conjunto utilizando el add()método. Por ejemplo,
const set = new Set((1, 2)); console.log(set.values()); // adding new elements set.add(3); console.log(set.values()); // adding duplicate elements // does not add to Set set.add(1); console.log(set.values());
Salida
Establecer iterador (1, 2) Establecer iterador (1, 2, 3) Establecer iterador (1, 2, 3)
Eliminar elementos
Puede utilizar el método clear()y el delete()para eliminar elementos de un conjunto.
El delete()método elimina un elemento específico de un Set. Por ejemplo,
const set = new Set((1, 2, 3)); console.log(set.values()); // Set Iterator (1, 2, 3) // removing a particular element set.delete(2); console.log(set.values()); // Set Iterator (1, 3)
El clear()método elimina todos los elementos de a Set. Por ejemplo,
const set = new Set((1, 2, 3)); console.log(set.values()); // Set Iterator (1, 2, 3) // remove all elements of Set set.clear(); console.log(set.values()); // Set Iterator ()
Iterar conjuntos
Puede iterar a través de los elementos Set usando el método for… of loop o forEach (). Se accede a los elementos en la orden de inserción. Por ejemplo,
const set = new Set((1, 2, 3)); // looping through Set for (let i of set) ( console.log(i); )
Salida
1 2 3
Conjunto débil de JavaScript
El WeakSet es similar a un Set. Sin embargo, WeakSet solo puede contener objetos, mientras que un Set puede contener cualquier tipo de datos como cadenas, números, objetos, etc. Por ejemplo,
const weakSet = new WeakSet(); console.log(weakSet); // WeakSet () let obj = ( message: 'Hi', sendMessage: true ) // adding object (element) to WeakSet weakSet.add(obj); console.log(weakSet); // WeakSet ((message: "Hi", sendMessage: true))
Cuando intenta agregar otros tipos de datos además de objetos, WeakSet arroja un error. Por ejemplo,
// trying to add string to WeakSet weakSet.add('hello'); // throws error // TypeError: Attempted to add a non-object key to a WeakSet console.log(weakSet);
Métodos WeakSet
WeakSets tienen métodos add(), delete()y has(). Por ejemplo,
const weakSet = new WeakSet(); console.log(weakSet); // WeakSet () const obj = (a:1); // add to a weakSet weakSet.add(obj); console.log(weakSet); // WeakSet ((a: 1)) // check if an element is in Set console.log(weakSet.has(obj)); // true // delete elements weakSet.delete(obj); console.log(weakSet); // WeakSet ()
Los conjuntos débiles no son iterables
A diferencia de los conjuntos, los conjuntos débiles no son iterables. Por ejemplo,
const weakSet = new WeakSet((a:1)); // looping through WeakSet for (let i of weakSet) ( // TypeError console.log(i); )
Operaciones de conjuntos matemáticos
En JavaScript, Set no proporciona métodos integrados para realizar operaciones matemáticas como unión, intersección, diferencia, etc. Sin embargo, podemos crear programas para realizar esas operaciones.
Ejemplo: Establecer operación de unión
// perform union operation // contain elements of both sets function union(a, b) ( let unionSet = new Set(a); for (let i of b) ( unionSet.add(i); ) return unionSet ) // two sets of fruits let setA = new Set(('apple', 'mango', 'orange')); let setB = new Set(('grapes', 'apple', 'banana')); let result = union(setA, setB); console.log(result);
Salida
Conjunto ("manzana", "mango", "naranja", "uvas", "plátano")
Ejemplo: Establecer operación de intersección
// perform intersection operation // elements of set a that are also in set b function intersection(setA, setB) ( let intersectionSet = new Set(); for (let i of setB) ( if (setA.has(i)) ( intersectionSet.add(i); ) ) return intersectionSet; ) // two sets of fruits let setA = new Set(('apple', 'mango', 'orange')); let setB = new Set(('grapes', 'apple', 'banana')); let result = intersection(setA, setB); console.log(result);
Salida
Establecer ("manzana")
Ejemplo: Establecer operación de diferencia
// perform difference operation // elements of set a that are not in set b function difference(setA, setB) ( let differenceSet = new Set(setA) for (let i of setB) ( differenceSet.delete(i) ) return differenceSet ) // two sets of fruits let setA = new Set(('apple', 'mango', 'orange')); let setB = new Set(('grapes', 'apple', 'banana')); let result = difference(setA, setB); console.log(result);
Salida
Conjunto ("mango", "naranja")
Ejemplo: Establecer operación de subconjunto
// perform subset operation // true if all elements of set b is in set a function subset(setA, setB) ( for (let i of setB) ( if (!setA.has(i)) ( return false ) ) return true ) // two sets of fruits let setA = new Set(('apple', 'mango', 'orange')); let setB = new Set(('apple', 'orange')); let result = subset(setA, setB); console.log(result);
Salida
cierto
JavaScript Setsy WeakSetsse introdujeron en ES6 . Es posible que algunos navegadores no admitan su uso. Para obtener más información, visite Soporte de JavaScript Sets y Soporte de JavaScript WeakSets.








