Maison >interface Web >js tutoriel >Explication détaillée de Set/WeakSet dans les compétences ECMAScript6_javascript

Explication détaillée de Set/WeakSet dans les compétences ECMAScript6_javascript

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBoriginal
2016-05-16 15:55:281248parcourir

ES6 ajoute un nouveau Set de déstructuration des données, qui, comme le Set de Java, ne stocke pas les éléments en double. Set est implémenté en tant que classe et doit être nouveau avant utilisation.

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

Utilisez la méthode d'ajout de Set pour ajouter des éléments ci-dessus. Les ajouts répétés ne seront pas enregistrés.

Le constructeur Set peut également accepter des tableaux comme paramètres

var s3 = new Set([1,2,3,1])
s3.size // 3

Vous pouvez voir que le numéro 1 répété n'est toujours pas inscrit. De plus, pour obtenir la longueur de l'ensemble, utilisez la taille et non la longueur.

Il est à noter que pour {} ou [], ce sont deux mêmes objets

var s4 = new Set()
s4.add({})
s4.add({})
s4.size // 2

1. Ensemble de traversée (pour de)

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. Convertir l'ensemble en tableau

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. Utilisez Set pour dédupliquer les tableaux

function distinct(arr) {
  return Array.from(new Set(arr))
// return [...new Set(arr)]
}

comme

Attributs de l'ensemble

constructeur
taille
Définir la méthode

has(val) détermine si l'élément existe
add(val) ajoute un élément
delete(val) supprimer l'élément
clear supprime tous les éléments
clés
valeurs
entrées
forEach traverse les éléments
carte
filtrer

4. Ensemble faible

WeakSet et Set ne stockent pas les éléments en double, mais il existe quelques différences

1. Stockez uniquement les éléments de type objet

ws = new WeakSet()
ws.add(1)

L'erreur signalée sous FF est la suivante

2. Il n'y a que trois méthodes add/delete/clear/has, qui ne peuvent pas être parcourues, et il n'y a pas d'attribut size, etc.

ws = new WeakSet()
ws.size // undefined
ws.forEach // undefined

Explication de MDN

Les valeurs d'objet stockées dans l'objet WeakSet sont faiblement référencées. Si aucune autre variable ou attribut ne fait référence à la valeur de l'objet, la valeur de l'objet sera récupérée. Pour cette raison, l'objet WeakSet ne peut pas être énuméré. il n'y a aucun moyen d'obtenir tous les éléments qu'il contient

WeakSet est principalement utilisé pour stocker les nœuds DOM Lorsque ces nœuds sont supprimés du document, ils ne provoqueront pas de fuites de mémoire.

Ce qui précède représente l’intégralité du contenu de cet article, j’espère que vous l’aimerez tous.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn