Some возвращает true при первом truthy-результате предиката и false, если подходящих элементов нет. Дыры массива пропускаются, длина фиксируется до обхода.
Создание полифила для метода Array.some()
Some возвращает true при первом truthy-результате предиката и false, если подходящих элементов нет. Дыры массива пропускаются, длина фиксируется до обхода.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте полифил, который воспроизводит поведение встроенного метода Array.some().
// [2, 5, 8, 1, 4].some((el) => el > 10); -------> false
// [12, 5, 8, 1, 4].some((el) => el > 10); -------> true
const some = () => {
}
Ответ
Some возвращает true при первом truthy-результате предиката и false, если подходящих элементов нет. Дыры массива пропускаются, длина фиксируется до обхода.
Отдельная функция без изменения встроенного прототипа:
function some(array, predicate, thisArg) {
if (array == null) throw new TypeError('Нужен массив или array-like');
const object = Object(array);
const rawLength = +object.length;
const length = Number.isNaN(rawLength) || rawLength <= 0 ? 0 : Math.min(Math.trunc(rawLength), Number.MAX_SAFE_INTEGER);
if (typeof predicate !== 'function') throw new TypeError('Нужен callback');
for (let index = 0; index < length; index++) {
if (index in object && predicate.call(thisArg, object[index], index, object)) return true;
}
return false;
}
Callback получает значение, индекс и исходный объект. Новые элементы за исходной длиной не посещаются, удалённые до посещения индексы пропускаются. Это учебный standalone-аналог метода.
Источник: tc39.es.