Set

Questa traduzione è incompleta. Collabora alla traduzione di questo articolo dall’originale in lingua inglese.

L'oggetto Set permette di memorizzare valori unici di qualunque tipo, che siano valori primitivi o riferimenti ad oggetti.
 

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.length
Il valore della proprietà length è 0.
get Set[@@species]
Il costruttore della funzione che viene usato per creare oggetti derivati.
Set.prototype
Rappresenta il prototipo per il costruttore del Set. Consente l'aggiunta di proprietà a tutti gli oggetti Set.

Instanze Set

Tutte le instanze di Set ereditano da Set.prototype.

Proprietà

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 2017 Draft (ECMA-262)
The definition of 'Set' in that specification.
Draft  

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”.

Guarda pure

Tag del documento e collaboratori

 Hanno collaborato alla realizzazione di questa pagina: zandorzz, Fredev
 Ultima modifica di: zandorzz,