Как с помощью Set найти пересечение двух массивов

Ответ

Для нахождения пересечения двух массивов с помощью Set можно воспользоваться методом filter и проверкой наличия элемента во втором множестве:

const arr1 = [1, 2, 3, 4];
const arr2 = [3, 4, 5, 6];

const set2 = new Set(arr2);
const intersection = arr1.filter(item => set2.has(item));

console.log(intersection); // [3, 4]

Алгоритм:

  1. Создаем Set из второго массива (для быстрого поиска)
  2. Фильтруем первый массив, оставляя только элементы, которые есть в Set
  3. В результате получаем массив с общими элементами

Преимущество Set - проверка has() работает за O(1), что делает алгоритм эффективным (O(n + m)).

Ответ 18+ 🔞

Да ты посмотри, какая хуйня! Ну то есть, задача-то проще пареной репы — найти, что у двух списков общего. Но если делать в лоб, тупо двумя циклами, так это ж, блядь, до второго пришествия можно ждать, если списки большие. Овердохуища операций получится!

А тут, смотри, какой красивый, блядь, финт ушами. Берёшь второй массив и нахуяриваешь из него Set. Это такая, блядь, коллекция, где каждый элемент — уникальный, и главное — проверить, есть ли там чё-то, можно мгновенно! Не надо, сука, по всему массиву ползать. has() — и всё, готово, за O(1), как ёбнуть стакан!

Потом просто проходишься по первому массиву обычным filter и спрашиваешь: «Эй, Set, а есть у тебя эта цифра?». Если есть — оставляешь, если нет — нахуй выбрасываешь. И всё, пиздец, готово!

Вот смотри, наглядненько:

const arr1 = [1, 2, 3, 4];
const arr2 = [3, 4, 5, 6];

const set2 = new Set(arr2); // Запоминаем второй массив в Супер-память
const intersection = arr1.filter(item => set2.has(item)); // Отфильтровываем только совпадения

console.log(intersection); // [3, 4]

И вся, блядь, философия! Сложность получается O(n + m), а не O(n * m), что, согласись, ёперный театр как лучше. Красота, да и только!