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

Операции Set в ECMAScript 2026: union, intersection, difference без библиотек

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

    В 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-кейсах, как работа с большими датасетами или кастомными хэшами объектов.

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

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

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

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

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

    Категории

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

    Контакты

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

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

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

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

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