0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Множество хоть и не используется так же широко, как массивы, но при этом в некоторых ситуациях являются очень полезными структурами данных. В этом уроке мы рассмотрим тип и структуру данных Set, который является реализацией математической структуры "множество".</p>
1
<p>Множество хоть и не используется так же широко, как массивы, но при этом в некоторых ситуациях являются очень полезными структурами данных. В этом уроке мы рассмотрим тип и структуру данных Set, который является реализацией математической структуры "множество".</p>
2
<h2>Фильтрация</h2>
2
<h2>Фильтрация</h2>
3
<p>Предположим, что у нас есть один массив, в котором мы описываем стоп-слова. Это те слова, которые не должны попасть в выходной поток. Также есть массив с набором слов:</p>
3
<p>Предположим, что у нас есть один массив, в котором мы описываем стоп-слова. Это те слова, которые не должны попасть в выходной поток. Также есть массив с набором слов:</p>
4
<p>Если посмотреть глубже на этот код, то можно увидеть одну небольшую проблему. Она в определенных ситуациях может иметь значение.</p>
4
<p>Если посмотреть глубже на этот код, то можно увидеть одну небольшую проблему. Она в определенных ситуациях может иметь значение.</p>
5
<p>includes проверяет вхождение полным перебором массива. В итоге на каждой итерации filter будет срабатывать перебор массива stopWords.</p>
5
<p>includes проверяет вхождение полным перебором массива. В итоге на каждой итерации filter будет срабатывать перебор массива stopWords.</p>
6
<p>В этом простом коде не возникнет проблем. Но в работе с большими объемами данных происходит большой процессинг. И это начинает иметь значение. Тогда придется как-то изменить массив на что-то другое, чтобы нам было удобно проверять вхождение. И для этого есть несколько способов:</p>
6
<p>В этом простом коде не возникнет проблем. Но в работе с большими объемами данных происходит большой процессинг. И это начинает иметь значение. Тогда придется как-то изменить массив на что-то другое, чтобы нам было удобно проверять вхождение. И для этого есть несколько способов:</p>
7
<ul><li>С использованием Map</li>
7
<ul><li>С использованием Map</li>
8
<li>С использованием Set</li>
8
<li>С использованием Set</li>
9
</ul><p>Разберем их подробнее.</p>
9
</ul><p>Разберем их подробнее.</p>
10
<h3>С использованием Map</h3>
10
<h3>С использованием Map</h3>
11
<p>Переделаем массив в Map, в котором ключ - это слово, а значение - это просто true:</p>
11
<p>Переделаем массив в Map, в котором ключ - это слово, а значение - это просто true:</p>
12
<p>Здесь мы по сути используем объект JavaScript. В данном случае большой разницы нет. Остальное практически то же самое, только проверяем, входит ли значение в stopWords с помощью !stopWords [word]. И если у нас возвращается undefined, то отрицание возвращает нам истину, и слово туда не попадает.</p>
12
<p>Здесь мы по сути используем объект JavaScript. В данном случае большой разницы нет. Остальное практически то же самое, только проверяем, входит ли значение в stopWords с помощью !stopWords [word]. И если у нас возвращается undefined, то отрицание возвращает нам истину, и слово туда не попадает.</p>
13
<p>Но есть еще один гораздо более интересный способ.</p>
13
<p>Но есть еще один гораздо более интересный способ.</p>
14
<h3>С использованием Set</h3>
14
<h3>С использованием Set</h3>
15
<p>По сути, в предыдущем примере мы использовали Map, как способ имитировать Set, то есть множество. Причем в нашем случае это множество неповторяющихся элементов.</p>
15
<p>По сути, в предыдущем примере мы использовали Map, как способ имитировать Set, то есть множество. Причем в нашем случае это множество неповторяющихся элементов.</p>
16
<p>И в JavaScript есть для этого специальный тип. Он работает практически так же, как и Map:</p>
16
<p>И в JavaScript есть для этого специальный тип. Он работает практически так же, как и Map:</p>
17
<p>Здесь мы пишем new Set() и передаем в него массив. После этого формируется некоторая структура, в которой внутри эффективным образом разложены все элементы этого массива. Поэтому проверка на вхождение во множество не требует перебора всех элементов.</p>
17
<p>Здесь мы пишем new Set() и передаем в него массив. После этого формируется некоторая структура, в которой внутри эффективным образом разложены все элементы этого массива. Поэтому проверка на вхождение во множество не требует перебора всех элементов.</p>
18
<p>На самом деле мы этого наверняка не знаем. Но обычно языки программирования делают множество с той целью, чтобы было очень легко и удобно проверять вхождение в этом множестве.</p>
18
<p>На самом деле мы этого наверняка не знаем. Но обычно языки программирования делают множество с той целью, чтобы было очень легко и удобно проверять вхождение в этом множестве.</p>
19
<p>В итоге программа меняется в двух местах: в определении множества и в проверке через метод has(). Это интерфейсный метод объекта, который у нас получился после new Set(). В нем мы передаем слово, и делается очень быстрая проверка. В итоге мы получаем такой же результат, как и в предыдущих способах.</p>
19
<p>В итоге программа меняется в двух местах: в определении множества и в проверке через метод has(). Это интерфейсный метод объекта, который у нас получился после new Set(). В нем мы передаем слово, и делается очень быстрая проверка. В итоге мы получаем такой же результат, как и в предыдущих способах.</p>
20
<h2>Интерфейс Set</h2>
20
<h2>Интерфейс Set</h2>
21
<p>Интерфейс у Set очень простой. Он принимает в конструкторе массив, который внутри себя раскладывает и сохраняет:</p>
21
<p>Интерфейс у Set очень простой. Он принимает в конструкторе массив, который внутри себя раскладывает и сохраняет:</p>
22
<p>При этом у него есть возможность устанавливать и изменять массив в момент работы с ним:</p>
22
<p>При этом у него есть возможность устанавливать и изменять массив в момент работы с ним:</p>
23
<p>Здесь используется метод add() для добавления элемента.</p>
23
<p>Здесь используется метод add() для добавления элемента.</p>
24
<p>Также у нас есть свойство size, которое позволяет проверить размер множества:</p>
24
<p>Также у нас есть свойство size, которое позволяет проверить размер множества:</p>
25
<p>Еще есть метод has(), который позволяет узнать, лежит ли что-то внутри или нет:</p>
25
<p>Еще есть метод has(), который позволяет узнать, лежит ли что-то внутри или нет:</p>
26
<p>И есть delete() для удаления. Метод принимает значение элемента, который нужно удалить:</p>
26
<p>И есть delete() для удаления. Метод принимает значение элемента, который нужно удалить:</p>
27
<h2>Обход</h2>
27
<h2>Обход</h2>
28
<p>Set не является массивом, но его можно преобразовать в массив, используя такой подход:</p>
28
<p>Set не является массивом, но его можно преобразовать в массив, используя такой подход:</p>
29
<p>Здесь мы используем Array.from и передаем в него Set. На выходе у нас появляется массив.</p>
29
<p>Здесь мы используем Array.from и передаем в него Set. На выходе у нас появляется массив.</p>
30
<p>Если мы передаем в конструктор Set массив, в котором повторяются элементы, то при формировании коллекции мы получаем уникальные элементы. Это простой способ найти уникальные значения в массиве. Это говорит о том, что Set действительно эффективно раскладывает массивы на уникальные значения.</p>
30
<p>Если мы передаем в конструктор Set массив, в котором повторяются элементы, то при формировании коллекции мы получаем уникальные элементы. Это простой способ найти уникальные значения в массиве. Это говорит о том, что Set действительно эффективно раскладывает массивы на уникальные значения.</p>
31
<p>Чтобы поработать с Set и обойти его, мы можем использовать следующие методы:</p>
31
<p>Чтобы поработать с Set и обойти его, мы можем использовать следующие методы:</p>
32
<h2>Выводы</h2>
32
<h2>Выводы</h2>
33
<p>В этом уроке мы рассмотрели тип и структуру данных Set, который является реализацией математической структуры "множество". Его интерфейс очень простой. Он принимает массив и раскладывает его на уникальные значения. Также у него есть возможность устанавливать и изменять массив в момент работы с ним, проверять размер элементов и узнавать, лежит ли что-то внутри.</p>
33
<p>В этом уроке мы рассмотрели тип и структуру данных Set, который является реализацией математической структуры "множество". Его интерфейс очень простой. Он принимает массив и раскладывает его на уникальные значения. Также у него есть возможность устанавливать и изменять массив в момент работы с ним, проверять размер элементов и узнавать, лежит ли что-то внутри.</p>