This translation is incomplete. Please help translate this article from English.

L'objecte Set permet emmagatzemar valors únics de qualsevol tipus, ja siguin valors primitius o bé referències a objectes.

Sintaxi

new Set([iterable]);

Paràmetres

iterable
Si rep un objecte iterable, tots els seus elements seran afegits al nou Set. null serà tractat com a undefined.

Descripció

Els objectes Set són coleccions de valors, els seus elements poden ser iterats en ordre d'inserció. Un valor només pot aparèixer un cop dins el Set; és únic dins la col·lecció del Set.

Igualtat de valors

Degut a que cada valor dins el Set ha de ser únic, la igualtat dels valors serà comprovada i aquesta no es basa en el mateix algoritme que l'emprat per l'operador ===. Concreatement, per a Sets, +0 (que és estrictament igual a -0) i -0 són valors diferents. Tot i així, aquest comportament s'ha canviat a la última especificació de l'ECMAScript 6. A partir de Gecko 29.0 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) (errada 952870) i una recent versió nightly del Chrome, +0 i -0 són tractats com al mateix valor en objectes Set. Així mateix, NaN i undefined també poden ser emmagatzemats dins un Set. NaN és considerat igual a NaN (tot i que NaN !== NaN).

Propietats

Set.length
El valor de la propietat length és 0.
get Set[@@species]
La funció constructora que s'ha utilitzat per a crear objectes derivats.
Set.prototype
Representa el prototipus per al constructor Set. Permet afegir propietats a tots els objectes Set.

Instàncies de Set

Totes les instàncies de Set hereten de Set.prototype.

Propietats

Set.prototype.constructor
Retorna la funció que ha creat la instància del prototipus. Per defecte es tracta de la funció Set.
Set.prototype.size
Retorna el nombre de valors emmagatzemats dins l'objecte Set.

Mètodes

Set.prototype.add(valor)
Afegeix un nou element a l'objecte Set amb el valor donat. Retorna l'objecte Set.
Set.prototype.clear()
Elimina tots els elements de l'objecte Set.
Set.prototype.delete(valor)
Elimina l'element associat a valor i retorna el que el mètode Set.prototype.has(valor) hagués retornat prèviament a aquesta crida. Després d'aquesta crida Set.prototype.has(valor) retornarà false.
Set.prototype.entries()
Retorna un nou objecte Iterator que conté un array de la forma [valor, valor] per a cada element dins l'objecte Set, en ordre d'inserció. El array retornat manté similitud amb el comportament de l'objecte Map, de forma que cada entrada té el mateix valor per a la seva clau i valor.
Set.prototype.forEach(callbackFn[, thisArg])
Crida callbackFn per a cada valor present a l'objecte Set, recorreguts per ordre d'inserció. Si es proporciona el paràmetre thisArg, aquest s'utilitzarà com a valor de this per a cada crida a callbackFn.
Set.prototype.has(value)
Retorna un booleà que especifica si la clau té un valor associat en aquest objecte Set o no.
Set.prototype.keys()
Es tracta de la mateixa funció que la funció values() i retorna un nou objecte Iterator que conté els valors per a cada element de l'objecte Set, en ordre d'inserció.
Set.prototype.values()
Retorna un nou objecte Iterator que conté els valors de cada element de l'objecte Set, en ordre d'inserció.
Set.prototype[@@iterator]()
Retorna un nou objecte Iterator que conté els valors de cada element de l'objecte Set, en ordre d'inserció.

Exemples

Utilitzar l'objecte Set

var mySet = new Set();

mySet.add(1);
mySet.add(5);
mySet.add("algun text");

mySet.has(1); // true
mySet.has(3); // false, 3 no ha estat afegit al set
mySet.has(5);              // true
mySet.has(Math.sqrt(25));  // true
mySet.has("Some Text".toLowerCase()); // true

mySet.size; // 3

mySet.delete(5); // esborra 5 del set
mySet.has(5);    // false, 5 ha sigut esborrat

mySet.size; // 2, acabem d'esborrar un valor

Iterarar Sets

// iterar els elements d'un set
// imprimeix els elements en l'ordre: 1, "algun text"
for (let item of mySet) console.log(item);

// imprimeix els elements en l'ordre: 1, "algun text"
for (let item of mySet.keys()) console.log(item);
 
// imprimeix els elements en l'ordre: 1, "algun text"
for (let item of mySet.values()) console.log(item);

// imprimeix els elements en l'ordre: 1, "algun text"
//(key i value són iguals en aquest exemple)
for (let [key, value] of mySet.entries()) console.log(key);

// converteix el set en un Array (mitjançant Array comprehensions)
var myArr = [v for (v of mySet)]; // [1, "algun text"]
// Alternativa (mitjançant Array.from)
var myArr = Array.from(mySet); // [1, "algun text"]

// el codi següent també funcionarà si s'executa dins un document HTML
mySet.add(document.body);
mySet.has(document.querySelector("body")); // true

// conversió entre Set i Array
mySet2 = new Set([1,2,3,4]);
mySet2.size; // 4
[...mySet2]; // [1,2,3,4]

// la intersecció es pot simular via
var intersection = new Set([x for (x of set1) if (set2.has(x))]);

// Iteració de les entrades del set mitjançant un forEach
mySet.forEach(function(value) {
  console.log(value);
});

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

Relació amb objectes Array

var myArray = ["valor1", "valor2", "valor3"];

// Utilitzem el constructor normal del Set per a transformar un Array en un Set
var mySet = new Set(myArray);

mySet.has("valor1"); // retorna true

// Utilitzem l'operador spread per a transformar un Set en un Array.
console.log(uneval([...mySet])); // Mostrarà exactament el mateix Array que myArray

Especificacions

Especificació Estat Comentaris
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Set' in that specification.
Standard Definició inicial.

Compatibilitat amb navegadors

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
Suport bàsic

38 [1]

13 (13) 11 25 7.1
Argument al constructor: new Set(iterable) 38 13 (13) No support 25 No support
iterable 38 17 (17) No support 25 7.1
Set.clear() 38 19 (19) 11 25 7.1
Set.keys(), Set.values(), Set.entries() 38 24 (24) No support 25 7.1
Set.forEach() 38 25 (25) 11 25 7.1
Igualtat de valors per a -0 i 0 38 29 (29) No support 25 No support
Argument del constructor: new Set(null) (Yes) 37 (37) ? ? ?
Monkey-patched add() al Constructor (Yes) 37 (37) ? ? ?
Set[@@species] ? 41 (41) ? ? ?
Set() sense new llença excepció ? 42 (42) ? ? ?
Característica Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Suport bàsic No support 38 [1] 13.0 (13) No support No support 8
Argument al constructor: new Set(iterable) No support 38 13.0 (13) No support No support No support
iterable No support No support 17.0 (17) No support No support 8
Set.clear() No support 38 19.0 (19) No support No support 8
Set.keys(), Set.values(), Set.entries() No support 38 24.0 (24) No support No support 8
Set.forEach() No support 38 25.0 (25) No support No support 8
Igualtat de valors per a -0 i 0 No support 38 29.0 (29) No support No support No support
Argument del constructor: new Set(null) ? (Yes) 37.0 (37) ? ? ?
Monkey-patched add() al Constructor ? (Yes) 37.0 (37) ? ? ?
Set[@@species] ? ? 41.0 (41) ? ? ?
Set() sense new llença excepció ? ? 42.0 (42) ? ? ?

[1] La característica estava disponible sota una preferència a partir de Chorem 31. Al chrome://flags, activeu l'entrada “Activa JavaScript Experimental”.

Vegeu també

Document Tags and Contributors

Contributors to this page: SphinxKnight, enTropy
Last updated by: SphinxKnight,