Set

Set - простыми словами, это особый вид коллекций по типу массива, но в котором каждое значение может повторяться только один раз. Короче: это массив, в котором каждое значение встречается только однажды.

Допустим, есть массив данных, в котором часть чисел повторяется:

Код
const arr = [1, 1, 2, 2, 4, 5, 6, 5];

Сформируем из него новый сет:

Код
const arr = [1, 1, 2, 2, 4, 5, 6, 5];

const set = new Set(arr);
console.log(set);

Цитата
Set(5) { 1, 2, 4, 5, 6 }

Как видно, все значения теперь стали уникальны и встречаются только один раз.

Допустим, из какой-то базы данных поступил список студентов группы:

Код
const arr = ['Alex', 'Ann', 'Oleg', 'Alex'];

Делаем из этого массива также новый сет, чтобы убедиться, что со строками всё сработает также как и с числами:

Код
const arr = ['Alex', 'Ann', 'Oleg', 'Alex'];

const set = new Set(arr);
console.log(set);

Цитата
Set(3) { 'Alex', 'Ann', 'Oleg' }

У Set также есть свои методы.

Метод add() - в аргументы добавляются какие-то данные, которые должны прийти в набор.

Код
const arr = ['Alex', 'Ann', 'Oleg', 'Alex'];

const set = new Set(arr);

set.add('Ivan');

console.log(set);

Цитата
Set(4) { 'Alex', 'Ann', 'Oleg', 'Ivan' }

Но если мы попробуем добавить значение, которое уже есть в наборе, ничего не произойдет:

Код
set.add('Oleg');

Цитата
Set(4) { 'Alex', 'Ann', 'Oleg', 'Ivan' }

После того как отработает, метод add() возвращает сам набор,что позволяет нам использовать цепочку операций:

Код
set.add('Ivan').add('Mikle');

console.log(set);

Цитата
Set(5) { 'Alex', 'Ann', 'Oleg', 'Ivan', 'Mikle' }

Подобный функционал можно реализовать и в обычном массиве, предварительно проходя по всему массиву в поисках конкретного значения, и если его не находим, то добавляем через push().
В поиске по массиву может помочь метод find()
Метод find() экземпляров Array возвращает первый элемент в указанном массиве, который удовлетворяет указанной функции проверки. Если ни одно значение не удовлетворяет функции проверки, возвращается undefined .

И всё же, с помощью set всё это будет реализовано быстрее и более оптимизированно.

Удалить какой-либо элемент из набора:

Код
set.delete(value);

Проверить, входит ли какой-то элемент в набор:

Код
set.has(value);

Полностью очистить набор:

Код
set.clear();

Узнать размер нашего набора данных:

Код
set.size;

Мы можем перебирать наш набор данных, есть два варианта: с помощью for...of и с помощью forEach()

Код
for (let value of set) console.log(value);

Цитата
Alex
Ann
Oleg
Ivan
Mikle

Вариант с forEach()

Код
set.forEach((value, valueAgaing, set) => {
  console.log(value, valueAgaing);
});

Второй аргумент valueAgaing это тот же value, сделано это для того, чтобы была совместимость.

Цитата
Alex Alex
Ann Ann
Oleg Oleg
Ivan Ivan
Mikle Mikle

Set также имеет встроенные методы:

set.values(); - возвращает новый объект итератора, который содержит все значения из набора. Порядок значений — в том же порядке, в котором они были добавлены в набор.

Код
console.log(set.values());

Цитата
[Set Iterator] { 'Alex', 'Ann', 'Oleg', 'Ivan', 'Mikle' }

set.keys() - метод для обратной совместимости с map(), возвращает объект итератора со значениями в наборе. Поскольку у набора нет ключей, метод keys() возвращает то же, что и values().

Код
console.log(set.keys());

Цитата
[Set Iterator] { 'Alex', 'Ann', 'Oleg', 'Ivan', 'Mikle' }

set.entries() - возвращает итератор, который позволяет обходить значения коллекции Set в виде пар [значение, значение]. Метод должен возвращать пару [ключ, значение] из объекта, но поскольку у набора нет ключей, возвращает [value, value]. Это делает наборы совместимыми с картами.

Код
console.log(set.entries());

Цитата
[Set Entries] {
[ 'Alex', 'Alex' ],
[ 'Ann', 'Ann' ],
[ 'Oleg', 'Oleg' ],
[ 'Ivan', 'Ivan' ],
[ 'Mikle', 'Mikle' ]
}

Из практического применения Set, часто реализуется функция-помощник для фильтрации любого массива.

Смысл работы такой функции: массив превращается в Set, в нём мы избавляемся от дублей, а потом из набора формируем новый массив из этих отобранных уникальных значений. Формируем его с помощью команды Array.from()

Код
const arr = ['Alex', 'Ann', 'Oleg', 'Alex'];

function unique(arr) {
  return Array.from(new Set(arr));
}

console.log(unique(arr));

Цитата
[ 'Alex', 'Ann', 'Oleg' ]


find()Документация

Всего комментариев: 0

Имя *:
Email *:
Код *:
Хостинг от uCoz