Проверяет умение работать с множествами и массивами для эффективного поиска пересечения уникальных элементов.
Задача поиска уникальных общих элементов двух массивов часто встречается при работе с данными: сравнение списков тегов, поиск пересечения множеств пользователей, фильтрация результатов. Наивное решение через двойной цикл имеет сложность O(n * m), что плохо масштабируется. Гораздо эффективнее использовать структуру данных Set, которая обеспечивает проверку наличия элемента за O(1).
Идея проста: мы превращаем один массив в Set, чтобы быстро проверять принадлежность. Затем проходим по второму массиву и оставляем только те элементы, которые есть в Set. Чтобы результат содержал только уникальные значения, оборачиваем его в новый Set и преобразуем обратно в массив.
function uniqueIntersection(arr1, arr2) {
const set1 = new Set(arr1);
const result = new Set();
for (const item of arr2) {
if (set1.has(item)) {
result.add(item);
}
}
return [...result];
}
console.log(uniqueIntersection([1, 2, 2, 3], [2, 3, 4])); // [2, 3]
Можно записать короче, но с потерей читаемости при больших данных:
const intersect = (a, b) => {
const s = new Set(b);
return [...new Set(a.filter(x => s.has(x)))];
};
Итог: применяйте подход через Set, когда важна производительность и нужно быстро найти пересечение массивов без дубликатов; для маленьких массивов подойдёт и простой filter с includes.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию