Ответ
Для нахождения пересечения двух массивов с помощью 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]
Алгоритм:
- Создаем
Setиз второго массива (для быстрого поиска) - Фильтруем первый массив, оставляя только элементы, которые есть в
Set - В результате получаем массив с общими элементами
Преимущество 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), что, согласись, ёперный театр как лучше. Красота, да и только!