> Как написать полифил для метода map в JavaScript (JavaScript)

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

Компании: Aston

Стек: JavaScript

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

Полифил для Array.prototype.map создаётся, чтобы обеспечить поддержку этого метода в старых браузерах (например, IE8-). Реализация должна строго следовать спецификации ECMAScript.

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

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

  • Проверка на null/undefined и тип callback.

  • Использование Object(this) для работы с примитивами (например, строками).

  • >>> 0 гарантирует, что длина - неотрицательное целое число.

  • Проверка i in array важна для разреженных массивов (пропущенные элементы не обрабатываются).

  • callback.call(thisArg, ...) обеспечивает привязку контекста this.

Пример использования:

JAVASCRIPT
[1, 2, 3].map(x => x * 2); // [2, 4, 6]

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

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