Проверка наличия элементов одного массива в другом в JS
Быстрый ответ
Если вам необходимо быстро проверить, содержат ли два массива общие элементы, вы можете использовать комбинацию методов array1.some() и array2.includes(). Ниже приведён пример, демонстрирующий, как можно сделать это одной строкой:
const sharedElementExists = [1, 2, 3].some(элемент => [3, 4, 5].includes(элемент)); // true, потому что элемнт 3 присутствует в обоих массивах
Этот код вернёт true, если хоть один элемент из array1 найден в array2, и false в противном случае.

Разбор принципов работы
Метод some применяется к каждому элементу array1. В свою очередь, в коллбэке метод includes проверяет, содержится ли текущий элемент array2. Это довольно эффективная комбинация, которую можно считать вложенной итерацией с алгоритмической сложностью O(n * m), где n и m – размеры массивов.
Использование преимуществ короткого цикла
Стоит отметить, что работа метода some прерывается, как только обнаруживается первое Истина-значение. Это означает, что если элемент из array1 найден в array2, то дальнейший перебор прекращается. Это может значительно увеличить производительность, особенно в случае раннего обнаружения совпадения.
Работа с массивами разных типов данных
Методы some и includes могут быть использованы для массивов различных типов данных: примитивов, объектов, функций, а также с пропуском элементов (т.е. для разреженных массивов).
Выявление всех общих элементов
С помощью сочетания методов filter и includes можно найти все пересекающиеся элементы массивов:
const intersections = array1.filter(item => array2.includes(item));
// intersections содержит [3], так как 3 – общий элемент для обоих массивов
Таким образом, вы получите новый массив с элементами, общими для array1 и array2.
Наглядный пример
Представьте, что вы ищете пересечения между маршрутами пешехода и автомобиля на оживлённом перекрёстке:
Массив 1 (пешеход 🚶♂️): [🔴, 🔵, 🟢]
Массив 2 (автомобиль 🚗): [🟡, 🔵, 🟣]
Рассмотрим потенциальные пересечения:
const commonPath = Array1.some(el => Array2.includes(el));
Существует ли угроза возможного столкновения между пешеходом и автомобилем?
Пересечение маршрутов: [🔵] // Пешеход и автомобиль пересекутся на синем цвете, однако столкновение не произойдет!
Заключение: Есть пересечение маршрутов!
Дополнительные направления исследований
Контроль над пробками
Если вам требуется работать с большими массивами, можно преобразовать array2 в набор (Set), который обычно имеет временную сложность O(1) при проверке наличия элемента:
const array2Set = new Set(array2);
const sharedElementExists = array1.some(элемент => array2Set.has(элемент));
Использование библиотек
Такие библиотеки, как Lodash и Underscore.js, предлагают метод intersection(), который может быть настроен и эффективен для подобных задач.
Защита от неизвестности
Желательно, чтобы ваше решение было устойчивым к различным неопределённым условиям, таким как null, undefined и массивы разной длины, чтобы функция безошибочно работала в любых ситуациях.
Полезные материалы
- Array.prototype.includes() – JavaScript | MDN – руководство MDN по методу
includes(). - Array.prototype.some() – JavaScript | MDN – документация MDN по использованию метода
some(). - Simplest code for array intersection in javascript – Stack Overflow – обсуждение различных подходов к реализации пересекающихся массивов на Stack Overflow.
- Compute intersection of two arrays in JavaScript – Stack Overflow – ещё одна обсуждаемая тема о поиске пересечений массивов на Stack Overflow.
- ECMAScript® 2016 Language Specification – спецификация ECMAScript 2016, описывающая методы работы с массивами, включая
includes(). - Simple array intersection – пример функции для нахождения пересечения массивов.


