Перейти к содержанию
  • Лента
  • Категории
  • Последние
  • Метки
  • Популярные
  • Пользователи
  • Группы
Свернуть
exlends
Категории
  1. Главная
  2. Категории
  3. Языки программирования
  4. JavaScript
  5. Новые методы Set в ECMAScript 2026: union и intersection без библиотек

Новые методы Set в ECMAScript 2026: union и intersection без библиотек

Запланировано Прикреплена Закрыта Перенесена JavaScript
ecmascript 2026set методыjavascript
1 Сообщения 1 Постеры 1 Просмотры
  • Сначала старые
  • Сначала новые
  • По количеству голосов
Ответить
  • Ответить, создав новую тему
Авторизуйтесь, чтобы ответить
Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
  • hannadevH Не в сети
    hannadevH Не в сети
    hannadev
    написал отредактировано
    #1

    В 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 для конвертации в массивы. В реальных проектах тестируйте на объемах - нативка выигрывает.

    1 ответ Последний ответ
    0

    Здравствуйте! Похоже, вас заинтересовала эта беседа, но у вас ещё нет аккаунта.

    Надоело каждый раз пролистывать одни и те же посты? Зарегистрировав аккаунт, вы всегда будете возвращаться на ту же страницу, где были раньше, и сможете выбирать, получать ли уведомления о новых ответах (по электронной почте или в виде push-уведомлений). Вы также сможете сохранять закладки и ставить лайки постам, чтобы выразить свою благодарность другим участникам сообщества.

    С вашими комментариями этот пост мог бы стать ещё лучше 💗

    Зарегистрироваться Войти

    Категории

    • Главная
    • Новости
    • Фронтенд
    • Бекенд
    • Языки программирования

    Контакты

    • Сотрудничество
    • info@exlends.com
    • Наш чат
    • Наш ТГ канал

    © 2024 - 2026 ExLends, Inc. Все права защищены.

    Политика конфиденциальности
    • Войти

    • Нет учётной записи? Зарегистрироваться

    • Войдите или зарегистрируйтесь для поиска.
    • Первое сообщение
      Последнее сообщение
    0
    • Лента
    • Категории
    • Последние
    • Метки
    • Популярные
    • Пользователи
    • Группы