> Как реализовать полифилл для Array.prototype.some с учетом callback и thisArg? (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Яндекс
Стек: JavaScript
> Пример ответа
Полифилл для Array.prototype.some должен имитировать поведение оригинального метода: вызывать callback для каждого элемента массива до тех пор, пока не вернётся truthy-значение. Если callback вернул true, метод сразу возвращает true. Если ни один вызов не вернул true - возвращается false. Также нужно корректно обработать thisArg (контекст для callback) и пропустить "дырки" в разрежённых массивах.
Вот реализация:
JAVASCRIPTif (!Array.prototype.some) {Array.prototype.some = function(callback, thisArg) {// Проверка, что this не null/undefinedif (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-результате.
> Похожие задачи по frontend
Как записывать ошибки в массив по индексу, соответствующему индексу промиса в JavaScript?
Как использовать несколько потоков в JavaScript
Как реализовать возврат true или false в полифилле some для прерывания перебора при первом true?
В каком порядке выполняются console.log в JavaScript с учетом синхронности и микротасков?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью