We're looking for a user researcher to understand the needs of developers and designers. Is this you or someone you know? Check out the post: https://mzl.la/2IGzdXS

Esta traducción está incompleta. Por favor, ayuda a traducir este artículo del inglés.

El objeto Set te permite almacenar valores únicos de cualquier tipo, incluso valores primitivos u objetos de referencia.

Sintaxis

new Set([iterable]);

Parámetros

iterable
Si un objeto iterable es pasado, todos sus elementos serán añadidos al nuevo Set. Si no se especifica este parámetro, o si su valor es null, el nuevo Set estará vacío.

 

Valor retornado

 

Una nueva instancia de Set.

Descripción

Los objetos Set son colecciones de valores. Se puede iterar sus elementos en el orden de su inserción. Un valor en un Set sólo puede estar una vez; éste es único en la colección Set.

Igualdad de valores

Ya que cada valor en el Set tiene que ser único, la igualdad del valor será comprobada y esta igualdad no se basa en el mismo algoritmo usado en el operador ===. Específicamente, para Sets, +0 (el cual es estrictamente igual a -0) y -0 son valores distintos. Sin embargo, esto ha cambiado en la última especificación ECMAScript 6. Iniciando con Gecko 29.0 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) (error 952870) y un recent nightly Chrome, +0-0 son tratados como el mismo valor en objetos Set

NaN y undefined también pueden ser almacenados en un Set. NaN es considerado igual que NaN (A pesar que NaN !== NaN).

Propiedades

Set.length
El valor de la propiedad length es 0.
get Set[@@species]
La función constructora que es usada para crear objetos derivados.
Set.prototype
Representa el prototipo para el constructor Set. Permite la adición de propiedades a todos los objetos Set.

Instancias Set

Todas las instancias de Set heredan de Set.prototype.

Propiedades

Set.prototype.constructor
Returns the function that created an instance's prototype. This is the Set function by default.
Set.prototype.size
Returns the number of values in the Set object.

Métodos

Set.prototype.add(value)
Appends a new element with the given value to the Set object. Returns the Set object.
Set.prototype.clear()
Removes all elements from the Set object.
Set.prototype.delete(value)
Removes the element associated to the value and returns the value that Set.prototype.has(value) would have previously returned. Set.prototype.has(value) will return false afterwards.
Set.prototype.entries()
Returns a new Iterator object that contains an array of [value, value] for each element in the Set object, in insertion order. This is kept similar to the Map object, so that each entry has the same value for its key and value here.
Set.prototype.forEach(callbackFn[, thisArg])
Calls callbackFn once for each value present in the Set object, in insertion order. If a thisArg parameter is provided to forEach, it will be used as the this value for each callback.
Set.prototype.has(value)
Returns a boolean asserting whether an element is present with the given value in the Set object or not.
Set.prototype.keys()
Is the same function as the values() function and returns a new Iterator object that contains the values for each element in the Set object in insertion order.
Set.prototype.values()
Returns a new Iterator object that contains the values for each element in the Set object in insertion order.
Set.prototype[@@iterator]()
Returns a new Iterator object that contains the values for each element in the Set object in insertion order.

Ejemplos

Usando el objeto Set

const mySet = new Set();

mySet.add(1);
mySet.add(5);
mySet.add('some text');

const o = {a: 1, b: 2};
mySet.add(o);

mySet.add({a: 1, b: 2}); // La variable "o" referencia a otro objeto, por lo que agrega otro valor.

mySet.has(1); // true
mySet.has(3); // false, 3 no ha sido añadido al Set
mySet.has(5);              // true
mySet.has(Math.sqrt(25));  // true
mySet.has('Some Text'.toLowerCase()); // true
mySet.has(o); // true

mySet.size; // 5

mySet.delete(5); // Elimina 5 del Set
mySet.has(5);    // false, 5 fue eliminado

mySet.size; // 4, sólo removimos un valor
console.log(mySet);// Set {1, "some text", Object {a: 1, b: 2}, Object {a: 1, b: 2}}

Iterando los Sets

// iterar todos los items de un set
// imprimir en consola los items en orden: 1, 'some text', {a: 1, b: 2}
for (let item of mySet) console.log(item);

// imprimir en consola los items en orden: 1, 'some text', {a: 1, b: 2}
for (let item of mySet.keys()) console.log(item);
 
// imprimir en consola los items en orden: 1, 'some text', {a: 1, b: 2}
for (let item of mySet.values()) console.log(item);

// imprimir en consola los items en orden: 1, 'some text', {a: 1, b: 2}
//(key y value poseen en mismo valor en este caso)
for (let [key, value] of mySet.entries()) console.log(key);

// crear un Array plano con los mismos valores, utilizando Array.from
const myArr = Array.from(mySet); // [1, 'some text', {a: 1, b: 2}]

// también se puede utilizar para guardar elementos del DOM
mySet.add(document.body);
mySet.has(document.querySelector('body')); // true

// crear un Array plano con los mismos valores, utilizando propagación
const mySet2 = new Set([1,2,3,4]);
mySet2.size; // 4
[...mySet2]; // [1,2,3,4]

// la intersección entre dos sets puede ser simulada con
const intersection = new Set([...set1].filter(x => set2.has(x)));

// la diferencia puede ser simulada con
const difference = new Set([...set1].filter(x => !set2.has(x)));

// Iteración utilizando forEach
mySet.forEach((value) => {
  console.log(value);
});

// 1
// 2
// 3
// 4

Implementando operaciones básicas

Set.prototype.isSuperset = function(subset) {
    for (var elem of subset) {
        if (!this.has(elem)) {
            return false;
        }
    }
    return true;
}

Set.prototype.union = function(setB) {
    var union = new Set(this);
    for (var elem of setB) {
        union.add(elem);
    }
    return union;
}

Set.prototype.intersection = function(setB) {
    var intersection = new Set();
    for (var elem of setB) {
        if (this.has(elem)) {
            intersection.add(elem);
        }
    }
    return intersection;
}

Set.prototype.difference = function(setB) {
    var difference = new Set(this);
    for (var elem of setB) {
        difference.delete(elem);
    }
    return difference;
}

//Examples
var setA = new Set([1,2,3,4]),
    setB = new Set([2,3]),
    setC = new Set([3,4,5,6]);

setA.isSuperset(setB); // => true
setA.union(setC); // => Set [1, 2, 3, 4, 5, 6]
setA.intersection(setC); // => Set [3, 4]
setA.difference(setC); // => Set [1, 2]

Relación con los objetos Array

const myArray = ['value1', 'value2', 'value3'];

// Utiliza el constructor para para crear un set con el mismo contenido que un array
const mySet = new Set(myArray);

mySet.has('value1'); // devuelve true

// Utiliza la propagación para crear un array con los contenidos de un set
console.log([...mySet]); // Muestra lo mismo utilizando myArray

Especificaciones

Specification Status Comment
ECMAScript 2015 (6th Edition, ECMA-262)
La definición de 'Set' en esta especificación.
Standard Initial definition.
ECMAScript Latest Draft (ECMA-262)
La definición de 'Set' en esta especificación.
Draft  

Compatibilidad de navegadores

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

Característica Chrome Firefox (Gecko) Internet Explorer Opera Safari
Soporte básico

38 [1]

13 (13) 11 25 7.1
Constructor argument: new Set(iterable) 38 13 (13) Sin soporte 25 Sin soporte
iterable 38 17 (17) Sin soporte 25 7.1
Set.clear() 38 19 (19) 11 25 7.1
Set.keys(), Set.values(), Set.entries() 38 24 (24) Sin soporte 25 7.1
Set.forEach() 38 25 (25) 11 25 7.1
Value equality for -0 and 0 38 29 (29) Sin soporte 25 Sin soporte
Constructor argument: new Set(null) (Yes) 37 (37) ? ? ?
Monkey-patched add() in Constructor (Yes) 37 (37) ? ? ?
Set[@@species] ? 41 (41) ? ? ?
Set() without new throws ? 42 (42) ? ? ?
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Soporte básico Sin soporte 38 [1] 13.0 (13) Sin soporte Sin soporte 8
Constructor argument: new Set(iterable) Sin soporte 38 13.0 (13) Sin soporte Sin soporte Sin soporte
iterable Sin soporte Sin soporte 17.0 (17) Sin soporte Sin soporte 8
Set.clear() Sin soporte 38 19.0 (19) Sin soporte Sin soporte 8
Set.keys(), Set.values(), Set.entries() Sin soporte 38 24.0 (24) Sin soporte Sin soporte 8
Set.forEach() Sin soporte 38 25.0 (25) Sin soporte Sin soporte 8
Value equality for -0 and 0 Sin soporte 38 29.0 (29) Sin soporte Sin soporte Sin soporte
Constructor argument: new Set(null) ? (Yes) 37.0 (37) ? ? ?
Monkey-patched add() in Constructor ? (Yes) 37.0 (37) ? ? ?
Set[@@species] ? ? 41.0 (41) ? ? ?
Set() without new throws ? ? 42.0 (42) ? ? ?

[1] La característica estaba disponible al activar una preferencia desde Chrome 31. En chrome://flags, activar el flag “Enable Experimental JavaScript”.

Ver también

Etiquetas y colaboradores del documento

Colaboradores en esta página: robe007, taniaReyesM, mjlescano, germanio, frank-orellana, Chofoteddy
Última actualización por: robe007,