Heim >Web-Frontend >js-Tutorial >Detaillierte Erläuterung der Set/WeakSet-Kenntnisse in ECMAScript6_javascript
ES6 fügt ein neues Datendestrukturierungsset hinzu, das wie das Set von Java keine doppelten Elemente speichert. Set wird als Klasse implementiert und muss vor der Verwendung neu sein.
var s1 = new Set() s1.add(1) s1.add(2) s1.add(3) s1.add(1) var s2 = new Set() s2.add('a') s2.add('a') // 输出1,2, 3 for (var i of s1 ) { console.log(i) } // 输出a for (var i of s2 ) { console.log(i) }
Verwenden Sie die Add-Methode von Set, um die oben genannten Elemente hinzuzufügen. Wiederholte Hinzufügungen werden nicht gespeichert.
Der Set-Konstruktor kann auch Arrays als Parameter akzeptieren
var s3 = new Set([1,2,3,1]) s3.size // 3
Sie können sehen, dass die wiederholte Nummer 1 immer noch nicht eingefügt ist. Um die Länge des Sets zu ermitteln, verwenden Sie außerdem die Größe und nicht die Länge.
Es ist zu beachten, dass es sich bei {} oder [] um zwei gleiche Objekte handelt
var s4 = new Set() s4.add({}) s4.add({}) s4.size // 2
1. Traversensatz (für)
var s1 = new Set() s1.add(1) s1.add(2) s1.add(3) // 输出1,2, 3 for (var i of s1) { console.log(i) }
2. Set in Array konvertieren
var s1 = new Set() s1.add(1) s1.add(2) // toArray var a1 = Array.from(s1) Array.isArray(a1) // true // or var a1 = [...new Set(s1)]
3. Verwenden Sie Set, um Arrays zu deduplizieren
function distinct(arr) { return Array.from(new Set(arr)) // return [...new Set(arr)] }
wie
Attribute der Menge
Konstrukteur
Größe
Methode festlegen
has(val) bestimmt, ob das Element existiert
add(val) fügt Element
hinzu
delete(val) Element löschen
clear entfernt alle Elemente
Tasten
Werte
Einträge
forEach durchquert Elemente
Karte
Filter
4. WeakSet
WeakSet und Set speichern keine doppelten Elemente, es gibt jedoch einige Unterschiede
1. Nur Objekttypelemente speichern
ws = new WeakSet() ws.add(1)
Der unter FF gemeldete Fehler lautet wie folgt
2. Es gibt nur drei Methoden zum Hinzufügen/Löschen/Löschen/Has, die nicht durchlaufen werden können, und es gibt kein Größenattribut usw.
ws = new WeakSet() ws.size // undefined ws.forEach // undefined
Erklärung von MDN
Die im WeakSet-Objekt gespeicherten Objektwerte werden schwach referenziert, wenn keine anderen Variablen oder Attribute auf den Objektwert verweisen. Aus diesem Grund kann das WeakSet-Objekt nicht aufgelistet werden. Es gibt keine Möglichkeit, alle darin enthaltenen Elemente abzurufen
WeakSet wird hauptsächlich zum Speichern von DOM-Knoten verwendet. Wenn diese Knoten aus dem Dokument entfernt werden, verursachen sie keine Speicherverluste.
Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, er gefällt Ihnen allen.