Suche…
Einführung
Mit dem Set-Objekt können Sie eindeutige Werte eines beliebigen Typs speichern, egal ob Grundwerte oder Objektreferenzen.
Setobjekte sind Sammlungen von Werten. Sie können die Elemente eines Satzes in Einfügungsreihenfolge durchlaufen. Ein Wert im Set darf nur EINMAL vorkommen. Es ist einzigartig in der Set-Kollektion. Unterschiedliche Werte werden mit dem SameValueZero- Vergleichsalgorithmus unterschieden.
Syntax
- neues Set ([iterable])
- mySet.add (Wert)
- mySet.clear ()
- mySet.delete (Wert)
- mySet.entries ()
- mySet.forEach (Rückruf [, thisArg])
- mySet.has (Wert)
- mySet.values ()
Parameter
Parameter | Einzelheiten |
---|---|
iterable | Wenn ein iterierbares Objekt übergeben wird, werden alle Elemente zum neuen Set hinzugefügt. null wird als undefiniert behandelt. |
Wert | Der Wert des Elements, das dem Set-Objekt hinzugefügt werden soll. |
Ruf zurück | Funktion, die für jedes Element ausgeführt werden soll. |
thisArg | Wahlweise. Wert, der beim Ausführen des Rückrufs verwendet werden soll. |
Bemerkungen
Da jeder Wert im Set eindeutig sein muss, wird die Wertegleichheit geprüft und basiert nicht auf demselben Algorithmus wie der im Operator === verwendete. Insbesondere für Sets sind +0 (was absolut gleich -0 ist) und -0 unterschiedliche Werte. Dies wurde jedoch in der neuesten Spezifikation von ECMAScript 6 geändert. Beginnend mit Gecko 29.0 (Firefox 29 / Thunderbird 29 / SeaMonkey 2.26) (Fehler 952870) und einem aktuellen nächtlichen Chrome werden +0 und -0 in Set-Objekten als der gleiche Wert behandelt. Auch NaN und undefined können in einem Set gespeichert werden. NaN gilt als das gleiche wie NaN (obwohl NaN! == NaN).
Set erstellen
Mit dem Set-Objekt können Sie eindeutige Werte eines beliebigen Typs speichern, egal ob Grundwerte oder Objektreferenzen.
Sie können Elemente in ein Set verschieben und sie ähnlich einem einfachen JavaScript-Array durchlaufen, aber im Gegensatz zu Array können Sie einem Set keinen Wert hinzufügen, wenn der Wert bereits darin enthalten ist.
So erstellen Sie ein neues Set:
const mySet = new Set();
Oder Sie können einen Satz aus einem beliebigen iterierbaren Objekt erstellen, um ihm Startwerte zu geben:
const arr = [1,2,3,4,4,5];
const mySet = new Set(arr);
Im obigen Beispiel wäre der eingestellte Inhalt {1, 2, 3, 4, 5}
. Beachten Sie, dass der Wert 4 im Gegensatz zum ursprünglichen Array, in dem er erstellt wurde, nur einmal angezeigt wird.
Einen Wert zu einem Set hinzufügen
Um einem Set einen Wert hinzuzufügen, verwenden Sie die .add()
-Methode:
mySet.add(5);
Wenn der Wert bereits im Set vorhanden ist, wird er nicht erneut hinzugefügt, da Sets eindeutige Werte enthalten.
Beachten Sie, dass die .add()
-Methode die Menge selbst zurückgibt, sodass Sie Aufrufe zusammenfassen können:
mySet.add(1).add(2).add(3);
Wert aus einem Satz entfernen
Um einen Wert aus einem Satz zu entfernen, verwenden Sie die .delete()
-Methode:
mySet.delete(some_val);
Diese Funktion gibt true
wenn der Wert in der Gruppe vorhanden war und entfernt wurde, andernfalls false
.
Prüfen, ob ein Wert in einem Satz vorhanden ist
Um zu überprüfen, ob ein bestimmter Wert in einer Menge vorhanden ist, verwenden Sie die .has()
-Methode:
mySet.has(someVal);
someVal
true
wenn someVal
in der Gruppe someVal
, andernfalls false
.
Einen Satz löschen
Sie können alle Elemente in einer Gruppe mit der .clear()
-Methode entfernen:
mySet.clear();
Länge einstellen
Sie können die Anzahl der Elemente innerhalb der Gruppe mit der Eigenschaft .size
const mySet = new Set([1, 2, 2, 3]);
mySet.add(4);
mySet.size; // 4
Diese Eigenschaft ist im Gegensatz zu Array.prototype.length
schreibgeschützt. Das bedeutet, dass Sie sie nicht ändern können, indem Sie ihr etwas zuweisen:
mySet.size = 5;
mySet.size; // 4
Im strikten Modus gibt es sogar einen Fehler:
TypeError: Cannot set property size of #<Set> which has only a getter
Sets in Arrays konvertieren
Manchmal müssen Sie ein Set möglicherweise in ein Array konvertieren, um beispielsweise Array.prototype
Methoden wie .filter()
. Verwenden Sie dazu Array.from()
oder destructuring-assignment
:
var mySet = new Set([1, 2, 3, 4]);
//use Array.from
const myArray = Array.from(mySet);
//use destructuring-assignment
const myArray = [...mySet];
Jetzt können Sie das Array so filtern, dass es nur gerade Zahlen enthält, und es mithilfe von Set-Konstruktor wieder in Set konvertieren:
mySet = new Set(myArray.filter(x => x % 2 === 0));
mySet
enthält jetzt nur gerade Zahlen:
console.log(mySet); // Set {2, 4}
Schnittmenge und Unterschied in Sets
Es gibt keine integrierten Methoden für Überschneidungen und Unterschiede in Sets, aber Sie können dies dennoch erreichen, indem Sie sie in Arrays konvertieren, filtern und zurück zu Sets konvertieren:
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}
Sets iterieren
Sie können eine einfache for-of-Schleife verwenden, um ein Set zu iterieren:
const mySet = new Set([1, 2, 3]);
for (const value of mySet) {
console.log(value); // logs 1, 2 and 3
}
Beim Durchlaufen eines Satzes werden immer Werte in der Reihenfolge zurückgegeben, in der sie dem Satz zuerst hinzugefügt wurden. Zum Beispiel:
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]
Es gibt auch eine .forEach()
-Methode, ähnlich wie Array.prototype.forEach()
. Es hat zwei Parameter, callback
, die für jedes Element ausgeführt werden, und optional thisArg
, die verwendet werden , wie this
bei der Ausführung callback
.
callback
hat drei Argumente. Die ersten beiden Argumente sind sowohl das aktuelle Element von Set (zur Konsistenz mit Array.prototype.forEach()
als auch Map.prototype.forEach()
) und das dritte Argument ist das Set selbst.
mySet.forEach((value, value2, set) => console.log(value)); // logs 1, 2 and 3