Set ist eine Datenstruktur, die zum Speichern geordneter Daten verwendet wird. Die Elemente in Set sind eindeutig und dürfen nicht dieselben Elemente speichern. Dieses iterierbare Objekt ist jedoch identisch entfernt, sodass damit doppelte Elemente entfernt und „Array.from(new Set(arr))“ oder „[...new Set(arr)]“ verhindert werden kann.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, ECMAScript Version 6, Dell G3-Computer.
Set
ist eine neue Datenstruktur, die von ES6
bereitgestellt wird. Sie wird zum Speichern geordneter Daten wie ein Array verwendet, jedoch ohne die Fähigkeit von Direkter Zugriff, das heißt, Sie können ein bestimmtes Element nicht wie bei einem Array durch Indizierung erhalten. Set
是 ES6
提供的一种新的数据结构,它跟数组一样用于存储有序的数据,但是没有随机访问的能力,也就是说,不能像数组一样通过索引来获取具体的某个元素。除此以外,最重要的是,Set
中的元素具有唯一性,不允许存储相同的元素!
Set
是一个构造函数,用于实例化实例:
let set = new Set() set.add(1)//往set集合中添加元素1
除此以外,Set()
可以接受一个可迭代对象作为参数,以作为实例初始化的数据,但是会将这个可迭代对象中相同的内容去除,然而,这也是数组去重的一个方法。
let set = new Set([1,2,2,1,4,3,5]) console.log(set)//Set(5) {1, 2, 4, 3, 5}
由元素唯一性这个特点,可以利用在数组去重上:
//方法一: Array.from(new Set(arr)) //arr是待去重的数组 //方法二: [...new Set(arr)]
太酷了吧,类似的,利用这个特性还能实现字符串相同字符的去重。
[...new Set(str)].join('')
然而,上面都是通过 Set
类型元素的唯一性来实现的,那么 Set
内部是如何判断元素是否唯一的呢?它的内部使用了一个算法 Same-value-zero equality
,大致与全等运算符一致,区别在于这种算法认为 NaN
等于 NaN
。
在 Set.prototype
上,定义了一个属性 size
表示元素的个数。
let set = new Set([1,2,2,1,4,3,5]) console.log(set.size)//5
Set
实例的方法可以分为两类:操作方法和遍历方法。
Set.prototype.add(value)
—— 添加某个值到 Set
的末尾,返回 Set
本身。Set.prototype.delete(value)
—— 删除某个值,返回布尔值,表示是否删除成功。Set.prototype.has(value)
—— 返回一个布尔值,表示该值是否为 Set
的元素。Set.prototype.clear()
—— 清除所有成员,没有返回值。值得一提的是,add()
方法的返回是 Set
本身,所以你应该能想到链式调用:
let set = new Set() set.add(1).add(2).add(3)
Set.prototype.keys()
—— 返回键名的遍历器Set.prototype.values()
—— 返回键值的遍历器Set.prototype.entries()
—— 返回键值对的遍历器Set.prototype.forEach()
—— 使用回调函数遍历元素由于 Set
结构没有键名,只有键值(或者说键名和键值是同一个值),所以 keys
方法和 values
方法的行为完全一致。
WeakSet
WeakSet
是 Set
的升级版,主要有两个区别:
WeakSet
只能存储引用类型,不能储存基本类型数据。WeakSet
中的引用类型都是弱引用。首先,第一点很好理解,就是不能存储基本类型的数据:
const ws = new WeakSet() ws.add(1)//报错,Invalid value used in weak set
然后第二点,WeakSet
中的对象都是弱引用。也就意味着垃圾回收机制不会考虑 WeakSet
对该对象的引用,一旦在外部引用计数为0,那么就等着被垃圾回收机制处理。所以,WeakSet
适合临时存放一组对象。
由于这个特征,WeakSet
中的成员是不适合引用的,因为它很可能会随时被清理,然而,ES6
规定它是不可遍历的。
WeakSet
中的方法也跟上面提到的 Set
基本一致,但是它没有 size
Außerdem ist das Wichtigste, dass die Elemente in Set
eindeutig sind und nicht dieselben Elemente gespeichert werden dürfen!
Set
ist ein Konstruktor, der zum Instanziieren einer Instanz verwendet wird: rrreeeDarüber hinaus kann Set()
ein iterierbares Objekt als Parameter akzeptieren, als Instanzinitialisierungsdaten, Derselbe Inhalt in diesem iterierbaren Objekt wird jedoch entfernt. Dies ist jedoch auch eine Methode der Array-Deduplizierung. rrreee
Set
erreicht. Wie bestimmt also Set
intern, ob ein Element eindeutig ist? Es verwendet intern einen Algorithmus Same-value-zero equality
, der in etwa dem Kongruenzoperator entspricht. Der Unterschied besteht darin, dass dieser Algorithmus NaN
als gleich NaN code>. 🎜🎜🎜2. Instanzattribute und -methoden🎜🎜<h3>🎜Instanzattribute🎜</h3>🎜Auf <code>Set.prototype
wird ein Attribut size
definiert, um das darzustellen Elementnummer. 🎜rrreeeSet
Instanzmethoden können in zwei Kategorien unterteilt werden: Operationsmethoden und Durchlaufmethoden. 🎜Set.prototype.add(value)
– Fügen Sie einen Wert zu Set
hinzu Ende von Set
selbst. Set.prototype.delete(value)
– Löschen Sie einen Wert und geben Sie einen booleschen Wert zurück, um anzugeben, ob der Löschvorgang erfolgreich war. Set.prototype.has(value)
– Gibt einen booleschen Wert zurück, der angibt, ob der Wert ein Element von Set
ist. Set.prototype.clear()
– Alle Mitglieder löschen, kein Rückgabewert. add()
Set
selbst ist, Sie sollten sich also Kettenaufrufe vorstellen können : 🎜rrreee Set.prototype.keys()
– Gibt einen Traverser von Schlüsselnamen zurückSet.prototype.values()
– Gibt einen Traverser von Schlüssel-Wert-Paaren zurückSet.prototype.entries()
– Gibt einen Traverser von Schlüsseln zurück -Wertepaare Set.prototype.forEach()
—— Callback-Funktion verwenden, um Elemente zu durchlaufen Set
Struktur hat keinen Schlüsselnamen, nur den Schlüsselwert (oder der Schlüsselname und der Schlüsselwert sind derselbe Wert), daher verhält sich die Methode keys
genauso wie die Methode values
Methode. 🎜🎜🎜3. WeakSet
🎜🎜🎜WeakSet
ist eine aktualisierte Version von Set
. Es gibt zwei Hauptunterschiede: 🎜WeakSet
kann nur Referenztypen speichern, keine Basistypdaten. WeakSet
sind alle schwache Referenzen. WeakSet
sind alles schwache Referenzen. Dies bedeutet, dass der Garbage-Collection-Mechanismus den Verweis von WeakSet
auf das Objekt nicht berücksichtigt. Sobald der externe Referenzzähler 0 erreicht, wartet er auf die Verarbeitung durch den Garbage-Collection-Mechanismus. Daher eignet sich WeakSet
zum temporären Speichern einer Gruppe von Objekten. 🎜🎜Aufgrund dieser Funktion sind Mitglieder in WeakSet
nicht als Referenz geeignet, da sie wahrscheinlich jederzeit bereinigt werden. ES6
schreibt jedoch vor, dass sie nicht überquert werden können . 🎜🎜Die Methoden in WeakSet
sind grundsätzlich die gleichen wie im oben erwähnten Set
, es verfügt jedoch nicht über das Attribut size
und keine Traverser-Methode. 🎜🎜【Verwandte Empfehlungen: 🎜Javascript-Video-Tutorial🎜, 🎜Programmiervideo🎜】🎜Das obige ist der detaillierte Inhalt vonWozu dient das ES6-Set?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!