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 Set
i 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 Set
obiektu, 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 Set
elementów za pomocą values()
metody i sprawdzić, czy w środku znajduje się element Set
za 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 Sets
i WeakSets
został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.