Heim  >  Artikel  >  Web-Frontend  >  Wozu dient das ES6-Set?

Wozu dient das ES6-Set?

青灯夜游
青灯夜游Original
2022-10-24 17:55:551911Durchsuche

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.

Wozu dient das ES6-Set?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, ECMAScript Version 6, Dell G3-Computer.

1. Grundlegende Verwendung

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. SetES6 提供的一种新的数据结构,它跟数组一样用于存储有序的数据,但是没有随机访问的能力,也就是说,不能像数组一样通过索引来获取具体的某个元素。除此以外,最重要的是,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 实例的方法可以分为两类:操作方法和遍历方法。

1.操作方法

  • 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)

2.遍历方法

  • Set.prototype.keys() —— 返回键名的遍历器
  • Set.prototype.values() —— 返回键值的遍历器
  • Set.prototype.entries() —— 返回键值对的遍历器
  • Set.prototype.forEach() —— 使用回调函数遍历元素

由于 Set 结构没有键名,只有键值(或者说键名和键值是同一个值),所以 keys 方法和 values 方法的行为完全一致。

三、WeakSet

WeakSetSet 的升级版,主要有两个区别:

  • WeakSet 只能存储引用类型,不能储存基本类型数据。
  • WeakSet 中的引用类型都是弱引用。

首先,第一点很好理解,就是不能存储基本类型的数据:

const ws = new WeakSet()
ws.add(1)//报错,Invalid value used in weak set

然后第二点,WeakSet 中的对象都是弱引用。也就意味着垃圾回收机制不会考虑 WeakSet 对该对象的引用,一旦在外部引用计数为0,那么就等着被垃圾回收机制处理。所以,WeakSet 适合临时存放一组对象。

由于这个特征,WeakSet 中的成员是不适合引用的,因为它很可能会随时被清理,然而,ES6 规定它是不可遍历的。

WeakSet 中的方法也跟上面提到的 Set 基本一致,但是它没有 sizeAuß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

Die Einzigartigkeit von Elementen kann zum Deduplizieren von Arrays genutzt werden: 🎜rrreee🎜Wie cool, diese Funktion kann auch zum Deduplizieren derselben Zeichen in einer Zeichenfolge verwendet werden. 🎜rrreee🎜Allerdings wird das oben Gesagte alles durch die Einzigartigkeit von Elementen vom Typ 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. 🎜rrreee

🎜Instanzmethoden🎜

🎜Set Instanzmethoden können in zwei Kategorien unterteilt werden: Operationsmethoden und Durchlaufmethoden. 🎜

🎜1. Operationsmethode🎜

  • 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.
🎜Es ist erwähnenswert, dass die Rückgabe der Methode add() Set selbst ist, Sie sollten sich also Kettenaufrufe vorstellen können : 🎜rrreee

🎜2. Traversal-Methode🎜

  • Set.prototype.keys() – Gibt einen Traverser von Schlüsselnamen zurück
  • Set.prototype.values() – Gibt einen Traverser von Schlüssel-Wert-Paaren zurück
  • Set.prototype.entries() – Gibt einen Traverser von Schlüsseln zurück -Wertepaare
  • Set.prototype.forEach() —— Callback-Funktion verwenden, um Elemente zu durchlaufen
🎜Seit dem 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.
  • Die Referenztypen in WeakSet sind alle schwache Referenzen.
🎜Zunächst ist der erste Punkt leicht zu verstehen, das heißt, grundlegende Datentypen können nicht gespeichert werden: 🎜rrreee🎜Dann der zweite Punkt, die Objekte in 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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn