JavaScript Set i WeakSet

W tym samouczku dowiesz się o zestawach JavaScript i WeakSets na podstawie przykładów.

Kod JavaScript ES6 wprowadziła dwie nowe struktury danych, IE Seti WeakSet.

Zestaw jest podobny do tablicy, która pozwala nam przechowywać wiele elementów, takich jak liczby, ciągi znaków, obiekty itp. Jednak w przeciwieństwie do tablicy zestaw nie może zawierać zduplikowanych wartości.

Utwórz zestaw JavaScript

Aby utworzyć Set, musisz użyć new Set()konstruktora. Na przykład,

 // create Set const set1 = new Set(); // an empty set console.log(set1); // Set () // Set with multiple types of value const set2 = new Set((1, 'hello', (count : true))); console.log(set2); // Set (1, "hello", (count: true))

Kiedy zduplikowane wartości są przekazywane do Setobiektu, powielone wartości są wykluczane.

 // Set with duplicate values const set3 = new Set((1, 1, 2, 2)); console.log(set3); // Set (1, 2)

Dostęp do elementów zestawu

Możesz uzyskać dostęp do Setelementów za pomocą values()metody i sprawdzić, czy w środku znajduje się element Setza pomocą has()metody. Na przykład,

 const set1 = new Set((1, 2, 3)); // access the elements of a Set console.log(set1.values()); // Set Iterator (1, 2, 3)

Możesz użyć tej has()metody, aby sprawdzić, czy element znajduje się w zestawie. Na przykład,

 const set1 = new Set((1, 2, 3)); // check if an element is in Set console.log(set1.has(1));

Dodawanie nowych elementów

Możesz dodawać elementy do zestawu za pomocą add()metody. Na przykład,

 const set = new Set((1, 2)); console.log(set.values()); // adding new elements set.add(3); console.log(set.values()); // adding duplicate elements // does not add to Set set.add(1); console.log(set.values());

Wynik

 Ustaw Iterator (1, 2) Ustaw Iterator (1, 2, 3) Ustaw Iterator (1, 2, 3)

Usuwanie elementów

Można użyć clear(), a delete()metody, aby usunąć elementy z zestawu.

delete()Sposób usuwa element specyficzną od A Set. Na przykład,

 const set = new Set((1, 2, 3)); console.log(set.values()); // Set Iterator (1, 2, 3) // removing a particular element set.delete(2); console.log(set.values()); // Set Iterator (1, 3)

clear()Sposób usuwa wszystkie elementy z Set. Na przykład,

 const set = new Set((1, 2, 3)); console.log(set.values()); // Set Iterator (1, 2, 3) // remove all elements of Set set.clear(); console.log(set.values()); // Set Iterator ()

Zestawy iteracyjne

Elementy Set można iterować za pomocą pętli for… of lub metody forEach (). Elementy są dostępne w kolejności reklamowej. Na przykład,

 const set = new Set((1, 2, 3)); // looping through Set for (let i of set) ( console.log(i); )

Wynik

 1 2 3

JavaScript WeakSet

WeakSet jest podobny do zestawu. Jednak WeakSet może zawierać tylko obiekty, podczas gdy zestaw może zawierać dowolne typy danych, takie jak łańcuchy, liczby, obiekty itp. Na przykład

 const weakSet = new WeakSet(); console.log(weakSet); // WeakSet () let obj = ( message: 'Hi', sendMessage: true ) // adding object (element) to WeakSet weakSet.add(obj); console.log(weakSet); // WeakSet ((message: "Hi", sendMessage: true))

Podczas próby dodania innych typów danych oprócz obiektów WeakSet zgłasza błąd. Na przykład,

 // trying to add string to WeakSet weakSet.add('hello'); // throws error // TypeError: Attempted to add a non-object key to a WeakSet console.log(weakSet);

Metody WeakSet

WeakSets mają metody add(), delete()oraz has(). Na przykład,

 const weakSet = new WeakSet(); console.log(weakSet); // WeakSet () const obj = (a:1); // add to a weakSet weakSet.add(obj); console.log(weakSet); // WeakSet ((a: 1)) // check if an element is in Set console.log(weakSet.has(obj)); // true // delete elements weakSet.delete(obj); console.log(weakSet); // WeakSet ()

WeakSets nie są iterowalne

W przeciwieństwie do zestawów WeakSets nie można iterować. Na przykład,

 const weakSet = new WeakSet((a:1)); // looping through WeakSet for (let i of weakSet) ( // TypeError console.log(i); )

Matematyczne operacje na zbiorach

W JavaScript Set nie udostępnia wbudowanych metod wykonywania operacji matematycznych, takich jak suma, przecięcie, różnica itp. Możemy jednak tworzyć programy do wykonywania tych operacji.

Przykład: Set Union Operation

 // perform union operation // contain elements of both sets function union(a, b) ( let unionSet = new Set(a); for (let i of b) ( unionSet.add(i); ) return unionSet ) // two sets of fruits let setA = new Set(('apple', 'mango', 'orange')); let setB = new Set(('grapes', 'apple', 'banana')); let result = union(setA, setB); console.log(result);

Wynik

 Zestaw („jabłko”, „mango”, „pomarańcza”, „winogrona”, „banan”)

Przykład: Ustaw operację przecięcia

 // perform intersection operation // elements of set a that are also in set b function intersection(setA, setB) ( let intersectionSet = new Set(); for (let i of setB) ( if (setA.has(i)) ( intersectionSet.add(i); ) ) return intersectionSet; ) // two sets of fruits let setA = new Set(('apple', 'mango', 'orange')); let setB = new Set(('grapes', 'apple', 'banana')); let result = intersection(setA, setB); console.log(result);

Wynik

 Zestaw („jabłko”)

Przykład: operacja ustawiania różnicy

 // perform difference operation // elements of set a that are not in set b function difference(setA, setB) ( let differenceSet = new Set(setA) for (let i of setB) ( differenceSet.delete(i) ) return differenceSet ) // two sets of fruits let setA = new Set(('apple', 'mango', 'orange')); let setB = new Set(('grapes', 'apple', 'banana')); let result = difference(setA, setB); console.log(result);

Wynik

 Zestaw („mango”, „pomarańczowy”)

Przykład: operacja ustawiania podzbioru

 // perform subset operation // true if all elements of set b is in set a function subset(setA, setB) ( for (let i of setB) ( if (!setA.has(i)) ( return false ) ) return true ) // two sets of fruits let setA = new Set(('apple', 'mango', 'orange')); let setB = new Set(('apple', 'orange')); let result = subset(setA, setB); console.log(result);

Wynik

 prawdziwe

JavaScript Setsi WeakSetszostały wprowadzone w ES6 . Niektóre przeglądarki mogą nie obsługiwać ich użycia. Aby dowiedzieć się więcej, odwiedź stronę pomocy technicznej JavaScript Sets i JavaScript WeakSets.

Interesujące artykuły...