Пересечение массивов на JavaScript

Пусть у нас даны два массива:

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

Можно заметить, что числа 2 и 3 присутствуют и в одном, и во втором массиве. Такие общие элементы называются пересечением массивов.

Давайте напишем функцию getInt, которая будет находить пересечение массивов и возвращать пересечение этих массивов. Пусть пересечение возвращается в виде массива, состоящего из общих элементов.

Итак, давайте решать задачу. В данном уроке я опять покажу вам процесс моих рассуждений при решении.

Первая мысль, которая у меня возникает, следующая: мне нужна функция, которая параметром принимает элемент, а вторым - массив, и проверяет, есть ли такой элемент в этом массиве.

Я бы назвал такую функцию inArray. Пусть у меня уже есть такая функция:

function inArray(elem, arr) { // код я напишу позже }

Рассуждаем далее.

Я вижу следующий алгоритм нахождения пересечения: нужно перебрать циклом элементы одного массива и в каждой итерации проверять, есть ли такой элемент во втором массиве. Если есть - добавим его в результат.

Для такой проверки мне и понадобится функция inArray. Запрограммирую описанное:

function getInt(arr1, arr2) { let result = []; for (let elem of arr1) { if (inArray(elem, arr2)) { result.push(elem); } } return result; } function inArray(elem, arr) { // код я напишу позже }

Здесь уместно задаться вопросом, а есть ли разница, какой массив (первый или второй) перебирать в цикле? Обдумав вопрос, я прихожу к выводу, что разницы нет (можете сами подумать об этом).

Теперь пришла пора реализовать функцию inArray. Ее легко можно сделать с помощью метода indexOf:

function inArray(elem, arr) { if (arr.indexOf(elem) == -1) { return false; } else { return true; } }

Можно переписать в более компактном виде:

function inArray(elem, arr) { return arr.indexOf(elem) !== -1; }

Следующий мой шаг такой: я потестирую созданную функцию:

console.log( inArray(3, [1, 2, 3]) ); // выведет true - верно console.log( inArray(5, [1, 2, 3]) ); // выведет false - верно

Теперь можно собрать весь код вместе:

function getInt(arr1, arr2) { let result = []; for (let elem of arr1) { if (inArray(elem, arr2)) { result.push(elem); } } return result; } function inArray(elem, arr){ return arr.indexOf(elem) !== -1; }

Обязательно потестируем созданную функцию:

console.log( getInt([1, 2, 3], [2, 3, 4, 5]) );

Самостоятельно, не подсматривая в мой код, повторите решение описанной задачи.