Набір JavaScript та WeakSet

У цьому посібнику ви дізнаєтесь про набори JavaScript та WeakSets за допомогою прикладів.

JavaScript ES6 представив дві нові структури даних, тобто Setі WeakSet.

Набір схожий на масив, який дозволяє зберігати кілька елементів, таких як числа, рядки, об'єкти тощо. Однак, на відміну від масиву, набір не може містити повторюваних значень.

Створіть набір 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 може містити лише об'єкти, тоді як набір може містити будь-які типи даних, такі як рядки, числа, об'єкти тощо. Наприклад,

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

Слабкі набори не піддаються ітерації

На відміну від наборів, слабкі набори не піддаються ітерації. Наприклад,

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

Операції з математичним набором

У JavaScript Set не передбачає вбудованих методів для виконання математичних операцій, таких як об'єднання, перетин, різниця тощо. Однак ми можемо створювати програми для виконання цих операцій.

Приклад: встановити операцію Union

 // 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 та підтримку WeakSets JavaScript.

Цікаві статті...