Проверяет умение находить пересечение нескольких массивов и понимание эффективных способов работы с множествами в JavaScript.
Пересечение массивов — это операция, при которой из нескольких наборов данных выбираются только те элементы, которые присутствуют во всех наборах одновременно. На практике это встречается при сравнении списков тегов, ролей пользователей, товаров в фильтрах и так далее.
Самый простой способ — взять один массив и отфильтровать его, проверяя наличие каждого элемента в остальных массивах. Такой код легко читается, но при больших массивах работает медленно, потому что includes каждый раз перебирает массив.
function intersect(...arrays) {
if (arrays.length === 0) return [];
return arrays[0].filter(item =>
arrays.every(arr => arr.includes(item))
);
}
intersect([1, 2, 3], [2, 3, 4], [3, 2, 5]); // [2, 3]Set хранит уникальные значения и проверяет наличие элемента за константное время. Если преобразовать остальные массивы в Set, проверка станет быстрее. Это особенно важно, когда массивов много или они большие.
function intersect(...arrays) {
if (arrays.length === 0) return [];
const sets = arrays.slice(1).map(a => new Set(a));
return [...new Set(arrays[0])].filter(item =>
sets.every(set => set.has(item))
);
}
intersect([1, 2, 3], [2, 3, 4], [3, 2, 5]); // [2, 3]Итог: для поиска общих элементов удобнее всего использовать Set и filter, так как это даёт понятный код и хорошую производительность. Простой вариант с includes подойдёт для небольших массивов или учебных задач.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию