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