Набор JavaScript и WeakSet

В этом руководстве вы узнаете о наборах 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.

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