> Как реализовать полифилл для Array.prototype.some с учетом callback и thisArg? (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Яндекс

Стек: JavaScript

> Пример ответа

Полифилл для Array.prototype.some должен имитировать поведение оригинального метода: вызывать callback для каждого элемента массива до тех пор, пока не вернётся truthy-значение. Если callback вернул true, метод сразу возвращает true. Если ни один вызов не вернул true - возвращается false. Также нужно корректно обработать thisArg (контекст для callback) и пропустить "дырки" в разрежённых массивах.

Вот реализация:

JAVASCRIPT
if (!Array.prototype.some) {
Array.prototype.some = function(callback, thisArg) {
// Проверка, что this не null/undefined
if (this == null) {
throw new TypeError('Array.prototype.some called on null or undefined');
}
// Проверка, что callback - функция
if (typeof callback !== 'function') {
throw new TypeError(callback + ' is not a function');
}
const array = Object(this); // Приведение к объекту
const length = Math.max(0, Math.min(array.length >>> 0, Number.MAX_SAFE_INTEGER));
for (let i = 0; i < length; i++) {
// Проверка наличия индекса в массиве (для разрежённых массивов)
if (i in array) {
// Вызов callback с переданным thisArg (или undefined, если не указан)
if (callback.call(thisArg, array[i], i, array)) {
return true;
}
}
}
return false;
};
}

Ключевые моменты:

  • Используем >>> 0 для гарантии, что длина - целое неотрицательное число.
  • Проверяем i in array, чтобы пропустить несуществующие индексы (дырки).
  • callback.call(thisArg, ...) передаёт контекст, если thisArg не указан - будет undefined, что в нестрогом режиме ссылается на глобальный объект (как и в оригинале).
  • Метод завершается досрочно при первом truthy-результате.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью