Set
Sintassi
new Set([iterabile]);
Parametri
- iterabile
- Se un oggetto iterabile è passato, tutti i suoi elementi saranno aggiunti al nuovo Set. null viene trattato come undefined.
Descrizione
Gli oggetti Set
sono collezioni di valori, e possibile iterare i valori nel loro ordine di inserimento. Un valore in un Set
può occorrere solo una volta; è quindi unico nella collezione.
Uguaglianza dei valori
Dato che ogni valore in un Set deve essere unico, dovra essere controllata l'uguaglianza di un nuovo valore con valori già presenti nel Set, questa operazione non è basata sullo stesso algoritmo usato per l'operatore ===. Nello specifico, per i Set, +0 (che è strettamente uguale a -0) e -0 sono valori differenti. Comunque, questo è stato cambiato nell'ultima specifica ECMAScript 6. Partendo da Gecko 29.0 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) (bug 952870) e da questa recente nightly Chrome issue, +0 e -0 sono trattati come valori identici nell'oggetto Set
. Inoltre, NaN
e undefined
possono essere memorizzati nei Set. NaN
è considerato unguale a NaN
(anche se NaN
!== NaN
).
Proprietà
Set.size
- Il valore della proprietà size è 0.
get Set[@@species]
(en-US)- Il costruttore della funzione che viene usato per creare oggetti derivati.
Set.prototype
(en-US)- Rappresenta il prototipo per il costruttore del
Set
. Consente l'aggiunta di proprietà a tutti gli oggettiSet
.
Instanze Set
Tutte le instanze di Set
ereditano da Set.prototype
(en-US).
Proprietà
{{page('it-IT/Web/JavaScript/Reference/Global_Objects/Set/prototype','Properties')}}
Methods
{{page('it-IT/Web/JavaScript/Reference/Global_Objects/Set/prototype','Methods')}}
Esempi
Uso dell'oggetto Set
var mySet = new Set();
mySet.add(1);
mySet.add(5);
mySet.add("some text");
var o = {a: 1, b: 2};
mySet.add(o);
mySet.has(1); // true
mySet.has(3); // false, 3 non è stato aggiunto al set
mySet.has(5); // true
mySet.has(Math.sqrt(25)); // true
mySet.has("Some Text".toLowerCase()); // true
mySet.has(o); // true
mySet.size; // 4
mySet.delete(5); // rimuove 5 dal set
mySet.has(5); // false, 5 è stato rimosso
mySet.size; // 3, abbiamo rimosso 1 valore
Iterando oggetti Set
// iterando i valori in un set
// logga gli item in ordine: 1, "testo di esempio"
for (let item of mySet) console.log(item);
// logga gli item in ordine: 1, "testo di esempio"
for (let item of mySet.keys()) console.log(item);
// logga gli item in ordine: 1, "testo di esempio"
for (let item of mySet.values()) console.log(item);
// logga gli item in ordine: 1, "testo di esempio"
//(chiavi e valori qui sono uguali)
for (let [key, value] of mySet.entries()) console.log(key);
// converte un set in un Array semplice (con )
// convert set to plain Array (con Array comprehensions)
var myArr = [v for (v of mySet)]; // [1, "some text"]
// Alternativa (con Array.from)
var myArr = Array.from(mySet); // [1, "some text"]
// Il seguente snippet funzionerà anche in un documento HTML
mySet.add(document.body);
mySet.has(document.querySelector("body")); // true
// conversione tra Set e Array
mySet2 = new Set([1,2,3,4]);
mySet2.size; // 4
[...mySet2]; // [1,2,3,4]
// l'itersezione può essere simulata con
var intersection = new Set([...set1].filter(x => set2.has(x)));
// la differenza può essere simulata con
var difference = new Set([...set1].filter(x => !set2.has(x)));
// Itera i valori di un set con forEach
mySet.forEach(function(value) {
console.log(value);
});
// 1
// 2
// 3
// 4
Relazione con gli oggetti Array
var myArray = ["value1", "value2", "value3"];
// Uso del costruttore di Set per trasformare un Array in un Set
var mySet = new Set(myArray);
mySet.has("value1"); // ritorna true
// Usa l'operatore spread per trasformare un Set in un Array
console.log(uneval([...mySet])); // Mostrerà lo stesso identico Array di myArray
Specifica
Specification | Status | Comment |
---|---|---|
ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Set' in that specification. |
Standard | Initial definition. |
ECMAScript (ECMA-262) The definition of 'Set' in that specification. |
Living Standard |
Browser compatibility
Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|
Basic support |
38 [1] |
13 (13) | 11 | 25 | 7.1 |
Constructor argument: 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 |
Value equality for -0 and 0 | 38 | 29 (29) | No support | 25 | No support |
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 |
---|---|---|---|---|---|---|
Basic support | No support | 38 [1] | 13.0 (13) | No support | No support | 8 |
Constructor argument: 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 |
Value equality for -0 and 0 | No support | 38 | 29.0 (29) | No support | No support | No support |
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 caratteristica è disponibile come opzione da Chrome 31. In chrome://flags
, attivare la voce “Enable Experimental JavaScript”.