Новые методы Set в ECMAScript 2026: union и intersection без библиотек
-
В ECMAScript 2026 Set обзавелся встроенными методами для операций с множествами. Теперь union() и intersection() работают нативно, без самописных функций или lodash. Это упрощает код и ускоряет разработку.
Раньше для объединения или пересечения приходилось писать циклы или использовать сторонние библиотеки. Новые методы решают эту проблему: возвращают новые Set, не меняя исходные. Полезно для фильтрации данных, обработки пользователей или уникализации списков в фронтенде и бэкенде.
Что такое union() и зачем он нужен
Метод Set.prototype.union(other) создает новый Set со всеми уникальными элементами из текущего и переданного Set. Он автоматически убирает дубликаты, что идеально для слияния коллекций. Представьте: у вас есть списки пользователей из разных источников - union соберет их в один без повторений.
До ES2026 приходилось делать так:
function union(setA, setB) { const result = new Set(setA); for (const elem of setB) { result.add(elem); } return result; }Теперь все проще - один вызов. Это сокращает код и снижает риск ошибок. Метод работает с любыми примитивными значениями и объектами, сравнивая по строгому равенству.
- Автоматическая уникальность: Дубли из любого Set игнорируются.
- Не мутирует оригиналы: Исходные Set остаются нетронутыми.
- Производительность: Оптимизировано на уровне движка V8.
Сценарий До ES2026 В ES2026 Объединение двух Set Цикл for…of + add() set1.union(set2) Слияние с массивом new Set([…set, …array]) set.union(new Set(array)) Размер результата Ручной подсчет result.size Intersection(): поиск общих элементов
Set.prototype.intersection(other) возвращает Set только с элементами, которые есть в обоих множествах. Это пересечение - базовая операция теории множеств, теперь доступная нативно. Полезно для поиска общих друзей в соцсетях или фильтрации товаров по тегам.
Пример: два Set с числами, intersection найдет совпадения. Раньше код выглядел так:
function intersection(setA, setB) { const result = new Set(); for (const elem of setB) { if (setA.has(elem)) { result.add(elem); } } return result; }В ES2026:
const common = set1.intersection(set2). Метод эффективен для больших коллекций, использует хэш-таблицы под капотом.const set1 = new Set([1, 2, 3, 4]); const set2 = new Set([2, 3, 5]); const common = set1.intersection(set2); console.log([...common]); // [2, 3]- Точное пересечение: Только элементы из обоих Set.
- Пустой результат: Если нет общих - вернет пустой Set.
- Любые типы: Строки, объекты, числа - все работает.
Пример set1 set2 intersection Числа {1,2,3} {2,3,4} {2,3} Строки {‘a’,‘b’} {‘b’,‘c’} {‘b’} Объекты {obj1,obj2} {obj2,obj3} {obj2} Практические примеры в реальных задачах
Эти методы упрощают типичные сценарии. Возьмем фронтенд: уникализация ID элементов из DOM. Или бэкенд: объединение ролей пользователей из БД. Без библиотек код чище и быстрее.
В мобильной разработке union помогает слить списки контактов, intersection - найти общих. Важно: методы возвращают новый Set, так что цепочки вызовов возможны, но для сложных операций лучше разбивать.
Пример с пользователями:
const adminIds = new Set([1, 2, 3]); const vipIds = new Set([2, 3, 4]); const both = adminIds.intersection(vipIds); // {2,3} const all = adminIds.union(vipIds); // {1,2,3,4}- Фильтрация тегов: Пересечение для поиска постов по нескольким меткам.
- Уникализация массивов: new Set(array).union(other).
- Валидация: Проверка, есть ли общие элементы с черным списком.
Таблица сравнения производительности (примерно, на больших Set):
Метод Время (10k элементов) Код строк union() O(n) 1 Самописный O(n) 5+ intersection() O(n) 1 Когда использовать и что дальше
Union и intersection покрывают 80% операций с множествами в JS. Они стандартны, поддерживаются во всех современных движках с ES2026. Нюанс: для симметричной разности или isSubsetOf смотрите difference и isSubsetOf - они тоже в наборе.
Осталось место для оптимизаций в больших данных или с WeakSet. Подумать стоит над комбинациями с Array.from для конвертации в массивы. В реальных проектах тестируйте на объемах - нативка выигрывает.
Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.
Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.
С вашими комментариями этот пост мог бы стать ещё лучше 💗
Зарегистрироваться Войти© 2024 - 2026 ExLends, Inc. Все права защищены.