В этом руководстве вы узнаете о наборах JavaScript и WeakSets с помощью примеров.
JavaScript ES6 представил две новые структуры данных, то есть Set
и WeakSet
.
Набор похож на массив, который позволяет нам хранить несколько элементов, таких как числа, строки, объекты и т. Д. Однако, в отличие от массива, набор не может содержать повторяющиеся значения.
Создать набор JavaScript
Для создания 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()
метод, чтобы проверить, входит ли элемент в Set. Например,
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());
Вывод
Установить итератор (1, 2) Установить итератор (1, 2, 3) Установить итератор (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 ()
WeakSets не повторяются
В отличие от наборов, 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 и поддержку WeakSets JavaScript.