Ricerca…


introduzione

L'oggetto Set consente di memorizzare valori univoci di qualsiasi tipo, siano essi valori primitivi o riferimenti a oggetti.

Gli oggetti set sono raccolte di valori. È possibile scorrere gli elementi di un set nell'ordine di inserimento. Un valore nel Set può verificarsi solo UNA VOLTA ; è unico nella collezione del Set. I valori distinti vengono discriminati utilizzando l'algoritmo di confronto SameValueZero .

Specifiche standard sul set

Sintassi

  • nuovo set ([iterable])
  • mySet.add (valore)
  • mySet.clear ()
  • mySet.delete (valore)
  • mySet.entries ()
  • mySet.forEach (callback [, thisArg])
  • mySet.has (valore)
  • mySet.values ​​()

Parametri

Parametro Dettagli
iterabile Se viene passato un oggetto iterabile, tutti i suoi elementi verranno aggiunti al nuovo Set. null viene considerato non definito.
valore Il valore dell'elemento da aggiungere all'oggetto Set.
richiama Funzione da eseguire per ciascun elemento.
thisArg Opzionale. Valore da utilizzare quando si esegue la richiamata.

Osservazioni

Poiché ogni valore nel Set deve essere unico, l'uguaglianza del valore sarà verificata e non si basa sullo stesso algoritmo utilizzato nell'operatore ===. In particolare, per Set, +0 (che è strettamente uguale a -0) e -0 sono valori diversi. Tuttavia, questo è stato modificato nell'ultima specifica ECMAScript 6. A partire da Gecko 29.0 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) (bug 952870) e un recente nightly Chrome, +0 e -0 vengono considerati come lo stesso valore in Set objects. Inoltre, NaN e undefined possono anche essere memorizzati in un Set. NaN è considerato uguale a NaN (anche se NaN! == NaN).

Creare un set

L'oggetto Set consente di memorizzare valori univoci di qualsiasi tipo, siano essi valori primitivi o riferimenti a oggetti.

È possibile inserire elementi in un set e iterarli in modo simile a un semplice array JavaScript, ma a differenza dell'array, non è possibile aggiungere un valore a un Set se il valore esiste già in esso.

Per creare un nuovo set:

const mySet = new Set();

Oppure puoi creare un set da qualsiasi oggetto iterabile per dargli dei valori iniziali:

const arr = [1,2,3,4,4,5];
const mySet = new Set(arr);

Nell'esempio sopra il contenuto dell'insieme sarebbe {1, 2, 3, 4, 5} . Si noti che il valore 4 viene visualizzato solo una volta, a differenza dell'array originale utilizzato per crearlo.

Aggiungere un valore a un Set

Per aggiungere un valore a un Set, usa il metodo .add() :

mySet.add(5);

Se il valore esiste già nel set, non verrà aggiunto di nuovo, poiché i Set contengono valori univoci.

Nota che il metodo .add() restituisce il set stesso, quindi puoi concatenare le chiamate di aggiunta:

mySet.add(1).add(2).add(3);

Rimozione del valore da un set

Per rimuovere un valore da un set, utilizzare il metodo .delete() :

mySet.delete(some_val);

Questa funzione restituirà true se il valore è presente nell'insieme ed è stato rimosso, oppure false altrimenti.

Verifica se esiste un valore in un set

Per verificare se esiste un determinato valore in un set, utilizzare il metodo .has() :

mySet.has(someVal);

Restituisce true se someVal appare nell'insieme, false altrimenti.

Cancellare un set

Puoi rimuovere tutti gli elementi in un set usando il metodo .clear() :

mySet.clear();

Ottenere la lunghezza impostata

Puoi ottenere il numero di elementi all'interno del set usando la proprietà .size

const mySet = new Set([1, 2, 2, 3]);
mySet.add(4);
mySet.size; // 4

Questa proprietà, a differenza di Array.prototype.length , è di sola lettura, il che significa che non è possibile cambiarlo assegnandogli qualcosa:

mySet.size = 5;
mySet.size; // 4

In modalità rigorosa genera persino un errore:

TypeError: Cannot set property size of #<Set> which has only a getter

Conversione di set su array

A volte potrebbe essere necessario convertire un set ad un array, ad esempio per essere in grado di utilizzare Array.prototype metodi come .filter() . Per fare ciò, usa Array.from() o destructuring-assignment :

var mySet = new Set([1, 2, 3, 4]);
//use Array.from
const myArray = Array.from(mySet);
//use destructuring-assignment
const myArray = [...mySet];

Ora puoi filtrare l'array in modo che contenga solo numeri pari e riconvertirli in Set usando Set constructor:

mySet = new Set(myArray.filter(x => x % 2 === 0));

mySet ora contiene solo numeri pari:

console.log(mySet); // Set {2, 4}

Intersezione e differenza negli insiemi

Non ci sono metodi incorporati per l'intersezione e la differenza nei Set, ma è comunque possibile ottenerli ma convertirli in array, filtrarli e convertirli in Set:

var set1 = new Set([1, 2, 3, 4]),
    set2 = new Set([3, 4, 5, 6]);

const intersection = new Set(Array.from(set1).filter(x => set2.has(x)));//Set {3, 4}
const difference = new Set(Array.from(set1).filter(x => !set2.has(x))); //Set {1, 2}

Set Iterating

Puoi usare un semplice ciclo for-it per iterare un Set:

const mySet = new Set([1, 2, 3]);

for (const value of mySet) {
  console.log(value); // logs 1, 2 and 3
}

Durante l'iterazione su un set, restituirà sempre i valori nell'ordine in cui sono stati aggiunti per la prima volta al set. Per esempio:

const set = new Set([4, 5, 6])
set.add(10)
set.add(5) //5 already exists in the set
Array.from(set) //[4, 5, 6, 10]

Esiste anche un metodo .forEach() , simile a Array.prototype.forEach() . Ha due parametri, callback , che verrà eseguito per ciascun elemento e optional thisArg , che verrà utilizzato come this quando si esegue la callback .

callback ha tre argomenti. I primi due argomenti sono entrambi l'elemento corrente di Set (per coerenza con Array.prototype.forEach() e Map.prototype.forEach() ) e il terzo argomento è il Set stesso.

mySet.forEach((value, value2, set) => console.log(value)); // logs 1, 2 and 3


Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow