JavaScript Set и WeakSet

В този урок ще научите за 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.

Интересни статии...