Операции Set в ECMAScript 2026: union, intersection, difference без библиотек
-
В ECMAScript 2026 Set обзавелся встроенными методами для операций с множествами. Теперь объединение, пересечение и разность делаются в одну строку без самописных функций. Это упрощает код, избавляет от ошибок и ускоряет разработку.
Раньше приходилось писать циклы или использовать хаки с filter и includes. Новые методы работают быстро, возвращают новые Set и поддерживают итераторы. Полезно для фильтрации данных, обработки уникальных значений и логики множеств в JS-приложениях.
Что нового в Set для ECMAScript 2026
Новые методы Set.prototype позволяют выполнять классические операции над множествами прямо из коробки. Раньше разработчики тратили время на реализацию union, intersection и difference через for-of или spread-операторы. Теперь всё стандартно: set1.union(set2) возвращает объединение без дубликатов.
Это особенно удобно в больших проектах, где уникальность данных критична. Методы immutable - исходные Set не меняются, что снижает баги. ECMAScript 2026 финализировал эти фичи, добавив также isSubsetOf и isSupersetOf для проверок.
Вот ключевые методы:
- union(other): все уникальные элементы из обоих Set.
- intersection(other): общие элементы.
- difference(other): элементы из текущего Set, которых нет в other.
Метод Описание Пример результата union Объединение Set {1,2,3,4,5} intersection Пересечение Set {3,4} difference Разность Set {1,2} Объединение множеств с union()
Метод union() берёт все уникальные значения из двух Set и возвращает новый Set. Он автоматически убирает дубликаты, как и положено в математике множеств. Синтаксис простой: const result = setA.union(setB).
Представьте два списка пользователей: активных и гостей. union объединит их без повторов ID. Производительность высокая, O(n+m), где n и m - размеры множеств. Работает с примитивами, объектами и NaN (который считается равным себе в Set).
Пример кода:
const active = new Set(['user1', 'user2', 'user3']); const guests = new Set(['user2', 'user4']); const all = active.union(guests); console.log([...all]); // ['user1', 'user2', 'user3', 'user4']Преимущества:
- Нет нужды в […new Set([…setA, …setB])].
- Поддержка любых iterable.
- Сохраняет порядок из первого Set.
Пересечение с intersection()
intersection(other) находит элементы, присутствующие в обоих множествах. Возвращает новый Set с общими значениями. Идеально для поиска дубликатов или общих ключей в данных.
Например, пересечение тегов статей и интересов пользователя даёт релевантный контент. Метод эффективен и не меняет оригиналы. Раньше код выглядел как for-of с has(), теперь - одна строка.
const tags1 = new Set(['js', 'react', 'css']); const tags2 = new Set(['react', 'vue', 'css']); const common = tags1.intersection(tags2); console.log([...common]); // ['react', 'css']Сравнение подходов:
Подход Код Длина Старый filter + includes 1 строка, но медленнее Новый intersection() 1 строка, быстрее Цикл for-of + has Много строк Нюансы:
- Работает с NaN корректно.
- Порядок следует первому Set.
- Подходит для Map.keys() как аргумента.
Разность множеств через difference()
difference(other) возвращает элементы из текущего Set, которых нет в other. Классическая разность A \ B. Полезно для исключения нежелательных значений, как удаление заблокированных пользователей из списка.
Метод сохраняет порядок исходного Set и игнорирует дубли в other. В ECMAScript 2026 он стабилен и оптимизирован. Раньше полагались на filter(x => !other.has(x)), что работало, но было громоздко.
const allUsers = new Set(['a', 'b', 'c', 'd']); const blocked = new Set(['b', 'd']); const allowed = allUsers.difference(blocked); console.log([...allowed]); // ['a', 'c']Использование:
- Фильтрация данных.
- Вычитание подмножеств.
- Комбинация с union для симметричной разности.
Дополнительные проверки: isSubsetOf и isSupersetOf
Эти методы проверяют отношения множеств. isSubsetOf(other) возвращает true, если все элементы текущего Set есть в other. isSupersetOf - обратное.
Полезно для валидации: все ли теги статьи входят в разрешенные. Логично сочетаются с основными операциями.
const small = new Set([1,2]); const big = new Set([1,2,3,4]); console.log(small.isSubsetOf(big)); // true console.log(big.isSupersetOf(small)); // trueКогда это меняет подходы к коду
Новые методы Set упрощают задачи с уникальными данными в 2026 году. Симметричная разность или сложные комбинации теперь короче и чище. Осталось место для оптимизаций в edge-кейсах, как работа с большими датасетами или кастомными хэшами объектов.
Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2024 - 2026 ExLends, Inc. Все права защищены.