JavaScript

Не слишком замудрил с двумя циклами? javascript

проверка того, есть ли элементы одного массива, в другом массиве.
к примеру, поиск двойки одного массива по позиции 2, в другом, где двойка на позиции 1495
В моем случае массивы содержат по 5 элементов.
Все правильно написал?
В случае соответствия, возвращается лож.
Oleg Avdeev
Oleg Avdeev
7
Зачем циклы со счётчиком, когда есть https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/for...of?
Зачем p2, когда можно сразу сравнивать p1 и argument2[q]?

Если убрать всё лишнее и оформить в функцию, получим:

function comp(a1, a2) {
for (let p1 of a1) { for (let p2 of a2) { if (p1 == p2) { return false; } } }
return true;
}

Да, для больших массивов не оптимально. Но для массивов по 5 элементов будет работать быстрее, чем оптимальный вариант с O(n * log(n)).

А можно и с одним циклом:

function comp(a1, a2) {
for (let p1 of a1) { if (a2.includes(p1)) { return false; } }
return true;
}

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Array/includes

Или в одну строчку без циклов и именованных функций:

result = a1.reduce((prev, cur) => !a2.includes(cur) && prev, true);
АН
Артем Низамов
96 300
Лучший ответ
Oleg Avdeev мой кусок кода делает тоже самое без проблем, но немного грамосток?
так?
Во-первых, наверное, всё-таки для универсальности лучше p1 === p2.
Во-вторых, вместо внутреннего цикла можно было использовать indexOf.
В-третьих, в JS есть break по метке, позволяющий выбраться из нескольких циклов сразу. Не уверен, является ли его использование хорошим тоном, но на всякий случай ознакомься. Кроме того, return можно использовать в любом месте функции. Существуют разные взгляды на использование его в середине тела функции, но лично я бы всё-таки впихнул его сразу во внутренний цикл, и брякать бы тогда не понадобилось.
В-четвертых, решение за O(n^2) неоптимально: в случае крупных входных данных размера порядка 10^4 элементов в каждом списке и больше будет уместнее использовать решение за O(nlogn) с сортировкой и двоичным поиском или ещё какие-нибудь костыли типа хеш-таблиц.

А так вроде норм выглядит. Позапускай на всяких тестиках.