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, которая полезна для борьбы с утечкой памяти.
const weakSet = new WeakSet();
Нельзя использовать примитивные типы, это вызовет ошибку. Можем добавить массивы или объекты.
const array = [1, 2, 4];
const weakSet = new WeakSet();
weakSet.add(array);
У WeakSet те же методы, что и у Set.
weakSet.has(array);
Перебор for-of недоступен.