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.

Standardspezifikation Über das Set

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


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow