Нужно ли передавать индекс и массив в callback функции some?
Что проверяют
Знаете ли вы сигнатуру колбэка перебирающих методов и понимаете ли, что аргументы передаёт движок, а не вы. Заодно смотрят, отличаете ли some от every, find и includes.
Как отвечать
Объявлять лишние параметры не нужно. Движок всегда вызывает колбэк с тремя аргументами (element, index, array), а сколько из них вы примете, ваше дело: лишние аргументы в JavaScript просто отбрасываются. Индекс объявляют, когда он реально нужен, третий параметр нужен редко, сам массив и так доступен по имени через замыкание.
const hasExpensive = items.some((it) => it.price > 1000);
const isSorted = arr.every((v, i, a) => i === 0 || a[i - 1] <= v);Что стоит добавить:
someостанавливается на первом истинном результате и возвращаетtrueилиfalse; на пустом массиве это всегдаfalse, уeveryнаоборотtrue;- второй аргумент самого
someэтоthisArg, для стрелочной функции он бессмысленен; - нужен сам элемент, берут
find, нужен его номер,findIndex; - пропуски в разрежённом массиве колбэк не получает, а явно записанный
undefinedполучает.
Где спотыкаются
Передают готовую функцию, не подумав про лишние аргументы. Классика с map: ["1", "2", "3"].map(parseInt) даёт 1, NaN, NaN, потому что индекс уезжает в основание системы счисления. С some так же ловится любая функция с необязательным вторым параметром, спасает обёртка вида (x) => fn(x).
Меняют массив прямо в колбэке. Длина для обхода фиксируется на старте: дописанные элементы посещены не будут, а после удаления через splice перебор перескочит через соседний элемент.
Ждут от some найденное значение и пишут сравнение с элементом. Метод возвращает только булево. Рядом путают его с includes, который сравнивает значения напрямую и никакого предиката не вызывает.