Set

Set появился в ES6 и представляет собой набор данных, в которых не могут находиться дубликаты.


// объявляем Set
const list = new Set();
// добавляем элемент
list.add(1);

Продолжить добавление сразу нескольких элементов можно цепочкой.


list.add(2).add(3).add(4);

Если вы попытаетесь добавить элемент, который уже имеется в списке, то добавляемый элемент будет проигнорирован.

Можно добавлять сразу несколько элементов через массив.


const numbers = new Set([1,2,3]);

Если по ошибке будете использовать дубликаты, то лишнее будет отброшено.


const moreNumbers = new Set([7,7,7,7,7,8,8,8,9,9]);

moreNumbers
// Set {7,8,9}

Поработаем со строкой.


const letters = new Set('kitten');
letters
Set(5) {"k", "i", "t", "e", "n"}

Лишние символы будут отброшены.

Слова можно добавляеть через add().


const words = new Set().add('I').add('love').add('cats');
words
Set(3) {"I", "love", "cats"}

При работе с объектами и массивами нужно помнить, что они разные, даже если их содержимое одинаково. Добавим два массива с одинаковыми значениями.


const arrays = new Set().add([1, 2]).add([1, 2]);

Оба массива будут включены Set, хотя внешне они одинаковы.

Также будут различаться элементы с числами и строками.


const mixedTypes = new Set().add(3).add('3');
mixedTypes
Set(2) {3, "3"}

Количество элементов можно узнать через свойство size.


mixedTypes.size;

Проверить наличие нужного элемента можно через функцию has().


words.has('cat');
false

Удалить элемент можно через delete. Если элемент существует, то вернётся true, иначе вернётся false.

Чтобы очистить все элементы, используйте clear().


words.clear()
words
Set(0) {}

Сеты можно конвертировать в массивы.


const catSet = new Set().add('Barsik').add('Murzik').add('Vaska');
const catArray = [...catSet];

// проверяем в консоли
catSet
Set(3) {"Barsik", "Murzik", "Vaska"}
catArray
(3) ["Barsik", "Murzik", "Vaska"]

Другой способ - использовать метод Array.from():


const catArray = Array.from(catSet);

Комбинируя массивы с сетами, можно получить массив с неповторяющими элементами.


const dublicatedArray = [1, 3, 5, 7, 7, 5, 3, 1, 9];
const notDublicatedArray  = [...new Set(dublicatedArray)];

Пройтись по всем элементам набора можно через for..of.


const words = new Set().add('I').add('love').add('cats');
for(const word of words){
   console.log(word);   
}

WeakSet

Существует разновидность сета - WeakSet, которая полезна для борьбы с утечкой памяти.


const weakSet = new WeakSet();

Нельзя использовать примитивные типы, это вызовет ошибку. Можем добавить массивы или объекты.


const array = [1, 2, 4];
const weakSet = new WeakSet();
weakSet.add(array);

У WeakSet те же методы, что и у Set.


weakSet.has(array);

Перебор for-of недоступен.

Реклама