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, Set
y 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 Set
objeto, 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 Set
elementos usando el values()
método y verificar si hay un elemento dentro Set
usando 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 Sets
y WeakSets
se 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.