<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Новые методы Set в ECMAScript 2026: union и intersection без библиотек]]></title><description><![CDATA[<p dir="auto">В ECMAScript 2026 Set обзавелся встроенными методами для операций с множествами. Теперь <strong>union()</strong> и <strong>intersection()</strong> работают нативно, без самописных функций или lodash. Это упрощает код и ускоряет разработку.</p>
<p dir="auto">Раньше для объединения или пересечения приходилось писать циклы или использовать сторонние библиотеки. Новые методы решают эту проблему: возвращают новые Set, не меняя исходные. Полезно для фильтрации данных, обработки пользователей или уникализации списков в фронтенде и бэкенде.</p>
<h2>Что такое union() и зачем он нужен</h2>
<p dir="auto">Метод <strong>Set.prototype.union(other)</strong> создает новый Set со всеми уникальными элементами из текущего и переданного Set. Он автоматически убирает дубликаты, что идеально для слияния коллекций. Представьте: у вас есть списки пользователей из разных источников - union соберет их в один без повторений.</p>
<p dir="auto">До ES2026 приходилось делать так:</p>
<pre><code class="language-javascript">function union(setA, setB) {
  const result = new Set(setA);
  for (const elem of setB) {
    result.add(elem);
  }
  return result;
}
</code></pre>
<p dir="auto">Теперь все проще - один вызов. Это сокращает код и снижает риск ошибок. Метод работает с любыми примитивными значениями и объектами, сравнивая по строгому равенству.</p>
<ul>
<li><strong>Автоматическая уникальность</strong>: Дубли из любого Set игнорируются.</li>
<li><strong>Не мутирует оригиналы</strong>: Исходные Set остаются нетронутыми.</li>
<li><strong>Производительность</strong>: Оптимизировано на уровне движка V8.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Сценарий</th>
<th>До ES2026</th>
<th>В ES2026</th>
</tr>
</thead>
<tbody>
<tr>
<td>Объединение двух Set</td>
<td>Цикл for…of + add()</td>
<td>set1.union(set2)</td>
</tr>
<tr>
<td>Слияние с массивом</td>
<td>new Set([…set, …array])</td>
<td>set.union(new Set(array))</td>
</tr>
<tr>
<td>Размер результата</td>
<td>Ручной подсчет</td>
<td>result.size</td>
</tr>
</tbody>
</table>
<h2>Intersection(): поиск общих элементов</h2>
<p dir="auto"><strong>Set.prototype.intersection(other)</strong> возвращает Set только с элементами, которые есть в обоих множествах. Это пересечение - базовая операция теории множеств, теперь доступная нативно. Полезно для поиска общих друзей в соцсетях или фильтрации товаров по тегам.</p>
<p dir="auto">Пример: два Set с числами, intersection найдет совпадения. Раньше код выглядел так:</p>
<pre><code class="language-javascript">function intersection(setA, setB) {
  const result = new Set();
  for (const elem of setB) {
    if (setA.has(elem)) {
      result.add(elem);
    }
  }
  return result;
}
</code></pre>
<p dir="auto">В ES2026: <code>const common = set1.intersection(set2)</code>. Метод эффективен для больших коллекций, использует хэш-таблицы под капотом.</p>
<pre><code class="language-javascript">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]
</code></pre>
<ul>
<li><strong>Точное пересечение</strong>: Только элементы из обоих Set.</li>
<li><strong>Пустой результат</strong>: Если нет общих - вернет пустой Set.</li>
<li><strong>Любые типы</strong>: Строки, объекты, числа - все работает.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Пример</th>
<th>set1</th>
<th>set2</th>
<th>intersection</th>
</tr>
</thead>
<tbody>
<tr>
<td>Числа</td>
<td>{1,2,3}</td>
<td>{2,3,4}</td>
<td>{2,3}</td>
</tr>
<tr>
<td>Строки</td>
<td>{‘a’,‘b’}</td>
<td>{‘b’,‘c’}</td>
<td>{‘b’}</td>
</tr>
<tr>
<td>Объекты</td>
<td>{obj1,obj2}</td>
<td>{obj2,obj3}</td>
<td>{obj2}</td>
</tr>
</tbody>
</table>
<h2>Практические примеры в реальных задачах</h2>
<p dir="auto">Эти методы упрощают типичные сценарии. Возьмем фронтенд: уникализация ID элементов из DOM. Или бэкенд: объединение ролей пользователей из БД. Без библиотек код чище и быстрее.</p>
<p dir="auto">В мобильной разработке union помогает слить списки контактов, intersection - найти общих. <em>Важно</em>: методы возвращают новый Set, так что цепочки вызовов возможны, но для сложных операций лучше разбивать.</p>
<p dir="auto">Пример с пользователями:</p>
<pre><code class="language-javascript">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}
</code></pre>
<ul>
<li><strong>Фильтрация тегов</strong>: Пересечение для поиска постов по нескольким меткам.</li>
<li><strong>Уникализация массивов</strong>: new Set(array).union(other).</li>
<li><strong>Валидация</strong>: Проверка, есть ли общие элементы с черным списком.</li>
</ul>
<p dir="auto">Таблица сравнения производительности (примерно, на больших Set):</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Метод</th>
<th>Время (10k элементов)</th>
<th>Код строк</th>
</tr>
</thead>
<tbody>
<tr>
<td>union()</td>
<td>O(n)</td>
<td>1</td>
</tr>
<tr>
<td>Самописный</td>
<td>O(n)</td>
<td>5+</td>
</tr>
<tr>
<td>intersection()</td>
<td>O(n)</td>
<td>1</td>
</tr>
</tbody>
</table>
<h2>Когда использовать и что дальше</h2>
<p dir="auto">Union и intersection покрывают 80% операций с множествами в JS. Они стандартны, поддерживаются во всех современных движках с ES2026. <em>Нюанс</em>: для симметричной разности или isSubsetOf смотрите difference и isSubsetOf - они тоже в наборе.</p>
<p dir="auto">Осталось место для оптимизаций в больших данных или с WeakSet. Подумать стоит над комбинациями с Array.from для конвертации в массивы. В реальных проектах тестируйте на объемах - нативка выигрывает.</p>
]]></description><link>https://forum.exlends.ru/topic/1502/novye-metody-set-v-ecmascript-2026-union-i-intersection-bez-bibliotek</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:38:59 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/1502.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Mar 2026 16:03:25 GMT</pubDate><ttl>60</ttl></channel></rss>