Esta página ha sido traducida del inglés por la comunidad.Aprende más y únete a la comunidad de MDN Web Docs.
Set
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since julio de 2015.
* Some parts of this feature may have varying levels of support.
El objetoSet le permite almacenar valores únicos de cualquier tipo, ya seavalores primitivos o referencias a objetos.
In this article
Descripción
Los objetosSet son colecciones de valores. Puede iterar a través de los elementos de un conjunto en orden de inserción. Un valor en unSetsolo puede ocurrir una vez; es único en la colección delSet.
Igualdad de valores
Debido a que cada valor en elSet tiene que ser único, se verificará la igualdad de valores. En una versión anterior de la especificación ECMAScript, esto no se basaba en el mismo algoritmo que el utilizado en el operador===. Específicamente, para losSet,+0 (que es estrictamente igual a-0) y-0 eran valores diferentes. Sin embargo, esto se cambió en la especificación ECMAScript 2015. Consulte"Igualdad de clave para -0 y 0" en la tabla decompatibilidad del navegador para obtener más detalles.
NaN yundefined también se pueden almacenar en unSet. Todos los valores deNaN se equiparan (es decir,NaN se considera lo mismo queNaN, aunqueNaN !== NaN).
Rendimiento
El métodohas deSet verifica si un valor está en un objetoSet, utilizando un enfoque que, en promedio, es más rápido que probar la mayoría de los elementos que se han agregado previamente al objetoSet. En particular, es, en promedio, más rápido que el métodoArray.prototype.includes cuando un objetoArray tiene unlength igual alsize de un objetoSet.
Constructor
Set()Crea un nuevo objeto
Set.
Propiedades estáticas
get Set[@@species]La función del constructor que se utiliza para crear objetos derivados.
Propiedades de instancia
Set.prototype.sizeDevuelve el número de valores en el objeto
Set.
Métodos de instancia
Set.prototype.add(value)Añade
valueal objetoSet. Devuelve el objetoSetcon el valor añadido.Set.prototype.clear()Elimina todos los elementos del objeto
Set.Set.prototype.delete(value)Elimina el elemento asociado a
valuey devuelve un booleano que afirma si un elemento se eliminó correctamente o no.Set.prototype.has(value)devolveráfalsedespués.Set.prototype.has(value)Devuelve un booleano que afirma si un elemento está presente con el valor dado en el objeto
Seto no.
Métodos de iteración
Set.prototype[@@iterator]()Devuelve un nuevo objeto iterador que genera losvalues de cada elemento del objeto
Seten el orden de inserción.Set.prototype.values()Devuelve un nuevo objeto iterador que genera losvalues de cada elemento del objeto
Seten el orden de inserción.Set.prototype.keys()Un alias para
Set.prototype.values().Set.prototype.entries()Devuelve un nuevo objeto iterador que contieneun arreglo de
[value, value]para cada elemento del objetoSet, en orden de inserción.Esto es similar al objeto
Map, de modo que laclave de cada entrada es la misma que suvalor para unSet.Set.prototype.forEach(callbackFn[,thisArg])Llama a
callbackFnuna vez por cada valor presente en el objetoSet, en orden de inserción. Si se proporciona un parámetrothisArg, se utilizará como valorthispara cada invocación decallbackFn.
Ejemplos
>Utilizando el objeto Set
const mySet1 = new Set();mySet1.add(1); // Set [ 1 ]mySet1.add(5); // Set [ 1, 5 ]mySet1.add(5); // Set [ 1, 5 ]mySet1.add("algún texto"); // Set [ 1, 5, 'algún texto' ]const o = { a: 1, b: 2 };mySet1.add(o);mySet1.add({ a: 1, b: 2 }); // o está haciendo referencia a un objeto diferente,// por lo que está bienmySet1.has(1); // truemySet1.has(3); // false, ya que 3 no se ha agregado al conjuntomySet1.has(5); // truemySet1.has(Math.sqrt(25)); // truemySet1.has("Algún Texto".toLowerCase()); // truemySet1.has(o); // truemySet1.size; // 5mySet1.delete(5); // elimina 5 del conjuntomySet1.has(5); // false, 5 ha sido eliminadomySet1.size; // 4, ya que acabamos de eliminar un valorconsole.log(mySet1);// imprime en consola Set(4) [ 1, "algún texto", {…}, {…} ] en Firefox// imprime en consola Set(4) { 1, "algún texto", {…}, {…} } en ChromeIterando Set
// iterar sobre los elementos en Set// imprime en consola los elementos en el orden:// 1, "algún texto", {"a": 1, "b": 2}, {"a": 1, "b": 2}for (let item of mySet1) console.log(item)// imprime en consola los elementos en el orden:// 1, "algún texto", {"a": 1, "b": 2}, {"a": 1, "b": 2}for (let item of mySet1.keys()) console.log(item)// imprime en consola los elementos en el orden:// 1, "algún texto", {"a": 1, "b": 2}, {"a": 1, "b": 2}for (let item of mySet1.values()) console.log(item)// imprime en consola los elementos en el orden:// 1, "algún texto", {"a": 1, "b": 2}, {"a": 1, "b": 2}// (key y value son los mismos aquí)for (let [key, value] of mySet1.entries()) console.log(key)// convertir el objeto Set en un objeto Array, con Array.fromconst myArr = Array.from(mySet1) // [1, "algún texto", {"a": 1, "b": 2}, {"a": 1, "b": 2}]// lo siguiente también funcionará si se ejecuta en un documento HTMLmySet1.add(document.body)mySet1.has(document.querySelector('body')) // true// conversión entre Set y Arrayconst mySet2 = new Set([1, 2, 3, 4])mySet2.size // 4[...mySet2] // [1, 2, 3, 4]// la intersección se puede simular a través deconst intersection = new Set([...mySet1].filter(x => mySet2.has(x)))// la diferencia se puede simular medianteconst difference = new Set([...mySet1].filter(x => !mySet2.has(x)))// iterar entradas de Set con forEach()mySet2.forEach(function(value) { console.log(value)})// 1// 2// 3// 4Implementación de operaciones básicas de conjuntos
function isSuperset(set, subset) { for (let elem of subset) { if (!set.has(elem)) { return false; } } return true;}function union(setA, setB) { let _union = new Set(setA); for (let elem of setB) { _union.add(elem); } return _union;}function intersection(setA, setB) { let _intersection = new Set(); for (let elem of setB) { if (setA.has(elem)) { _intersection.add(elem); } } return _intersection;}function symmetricDifference(setA, setB) { let _difference = new Set(setA); for (let elem of setB) { if (_difference.has(elem)) { _difference.delete(elem); } else { _difference.add(elem); } } return _difference;}function difference(setA, setB) { let _difference = new Set(setA); for (let elem of setB) { _difference.delete(elem); } return _difference;}// Ejemplosconst setA = new Set([1, 2, 3, 4]);const setB = new Set([2, 3]);const setC = new Set([3, 4, 5, 6]);isSuperset(setA, setB); // devuelve trueunion(setA, setC); // devuelve Set {1, 2, 3, 4, 5, 6}intersection(setA, setC); // devuelve Set {3, 4}symmetricDifference(setA, setC); // devuelve Set {1, 2, 5, 6}difference(setA, setC); // devuelve Set {1, 2}Relación con objetos Array
let myArray = ["value1", "value2", "value3"];// Use el constructor Set regular para transformar una matriz en un conjuntolet mySet = new Set(myArray);mySet.has("value1"); // devuelve true// Utilice el operador de dispersión para transformar un conjunto en una matriz.console.log([...mySet]); // Le mostrará exactamente el mismo Array que myArrayEliminar elementos duplicados del Array
// Úselo para eliminar elementos duplicados del Arrayconst numbers = [2, 3, 4, 4, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 5, 32, 3, 4, 5];console.log([...new Set(numbers)]);// [2, 3, 4, 5, 6, 7, 32]Relación con Strings
let text = "India";const mySet = new Set(text); // Set(5) {'I', 'n', 'd', 'i', 'a'}mySet.size; // 5// mayúsculas, minúsculas y omisión duplicadanew Set("Firefox"); // Set(7) { "F", "i", "r", "e", "f", "o", "x" }new Set("firefox"); // Set(6) { "f", "i", "r", "e", "o", "x" }Use Set para garantizar la unicidad de una lista de valores
const array = Array.from(document.querySelectorAll("[id]")).map(function (e) { return e.id;});const set = new Set(array);console.assert(set.size == array.length);Especificaciones
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-set-objects> |