Имитация Array.map с применением Array.reduce

В reduce записывайте результат callback по исходному индексу в заранее созданный массив. Так сохраняются длина и пропуски разреженного массива, в отличие от push.

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

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

В reduce записывайте результат callback по исходному индексу в заранее созданный массив. Так сохраняются длина и пропуски разреженного массива, в отличие от push.

Подробный разбор

Ответ с пояснениями

Условие

Напишите функцию, которая воспроизводит поведение встроенного метода Array.prototype.map, используя исключительно метод reduce для преобразования элементов массива.

Ответ

В reduce записывайте результат callback по исходному индексу в заранее созданный массив. Так сохраняются длина и пропуски разреженного массива, в отличие от push.

function mapWithReduce(array, callback, thisArg) {
  if (typeof callback !== 'function') throw new TypeError('callback must be a function');
  return array.reduce((result, value, index, source) => {
    result[index] = callback.call(thisArg, value, index, source);
    return result;
  }, new Array(array.length));
}

reduce пропускает отсутствующие элементы, как и map. Callback получает значение, индекс и исходный массив; новый массив не заполняет holes значениями undefined. Это реализация для обычных массивов, а не полный полифил поведения подклассов и Symbol.species.

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

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

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

Подробнее