Создание полифила для метода Array.some()

Some возвращает true при первом truthy-результате предиката и false, если подходящих элементов нет. Дыры массива пропускаются, длина фиксируется до обхода.

Короткий ответ

Что ответить на собеседовании

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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее