В този урок ще научите за JavaScript Sets и WeakSets с помощта на примери.
JavaScript ES6 представи две нови структури от данни, т.е. Set
и WeakSet
.
Set е подобен на масив, който ни позволява да съхраняваме множество елементи като числа, низове, обекти и т.н. Въпреки това, за разлика от масива, набор не може да съдържа дублирани стойности.
Създайте JavaScript набор
За да създадете a Set
, трябва да използвате new Set()
конструктора. Например,
// 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))
Когато дублираните стойности се предават на Set
обект, дублираните стойности се изключват.
// Set with duplicate values const set3 = new Set((1, 1, 2, 2)); console.log(set3); // Set (1, 2)
Достъп до зададени елементи
Можете да получите достъп до Set
елементи с помощта на values()
метода и да проверите дали има елемент вътре Set
с помощта на has()
метода. Например,
const set1 = new Set((1, 2, 3)); // access the elements of a Set console.log(set1.values()); // Set Iterator (1, 2, 3)
Можете да използвате has()
метода, за да проверите дали елементът е в набор. Например,
const set1 = new Set((1, 2, 3)); // check if an element is in Set console.log(set1.has(1));
Добавяне на нови елементи
Можете да добавяте елементи към набор, използвайки add()
метода. Например,
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());
Изход
Set Iterator (1, 2) Set Iterator (1, 2, 3) Set Iterator (1, 2, 3)
Премахване на елементи
Можете да използвате метода clear()
и, за delete()
да премахнете елементи от набор.
В delete()
метода премахва специфичен елемент от Set
. Например,
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()
метод премахва всички елементи от един Set
. Например,
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 ()
Итерация на комплекти
Можете да прегледате елементите Set, като използвате цикъла for… of или forEach (). Елементите са достъпни в реда на вмъкване. Например,
const set = new Set((1, 2, 3)); // looping through Set for (let i of set) ( console.log(i); )
Изход
1 2 3
JavaScript WeakSet
WeakSet е подобен на Set. WeakSet обаче може да съдържа само обекти, докато Set може да съдържа всякакви типове данни като низове, числа, обекти и др. Например,
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))
Когато се опитате да добавите други типове данни освен обекти, WeakSet извежда грешка. Например,
// 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);
Методи WeakSet
WeakSets имат методи add()
, delete()
и has()
. Например,
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 ()
Слабите набори не са итеративни
За разлика от Sets, WeakSets не са итерируеми. Например,
const weakSet = new WeakSet((a:1)); // looping through WeakSet for (let i of weakSet) ( // TypeError console.log(i); )
Операции с математически набор
В JavaScript Set не предоставя вградени методи за извършване на математически операции като обединение, пресичане, разлика и др. Въпреки това можем да създадем програми за извършване на тези операции.
Пример: Задайте операция на съюз
// 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);
Изход
Комплект ("ябълка", "манго", "портокал", "грозде", "банан")
Пример: Задаване на операция за пресичане
// 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);
Изход
Комплект ("ябълка")
Пример: Задаване на операция за разлика
// 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);
Изход
Комплект ("манго", "оранжево")
Пример: Задаване на операция на подмножество
// 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);
Изход
вярно
JavaScript Sets
и WeakSets
бяха въведени в ES6 . Някои браузъри може да не поддържат тяхното използване. За да научите повече, посетете поддръжката на JavaScript комплекти и поддръжката на JavaScript WeakSets.