Самописная реализация метода map для массивов

Создайте массив исходной длины и заполняйте только существующие индексы результатом callback. Передавайте также индекс, исходный массив и необязательный thisArg.

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

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

Создайте массив исходной длины и заполняйте только существующие индексы результатом callback. Передавайте также индекс, исходный массив и необязательный thisArg.

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

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

Условие

Необходимо написать собственную версию метода map, который обычно предоставляется массивам в стандартной библиотеке. Реализация должна работать без обращения к встроенному Array.prototype.map и поддерживать передачу callback‑функции, получая элементы массива, их индексы и сам массив в качестве аргументов.

Ответ

Создайте массив исходной длины и заполняйте только существующие индексы результатом callback. Передавайте также индекс, исходный массив и необязательный thisArg.

function myMap(array, callback, thisArg) {
  if (typeof callback !== 'function') throw new TypeError('Expected callback');
  const length = array.length;
  const result = new Array(length);
  for (let index = 0; index < length; index++) {
    if (index in array) result[index] = callback.call(thisArg, array[index], index, array);
  }
  return result;
}

Метод map не используется. Длина фиксируется до вызовов callback, пропуски сохраняются и не посещаются. Добавленные в конец элементы не обрабатываются. Это реализация для обычных массивов, а не полный стандартный полифил для всех array-like и подклассов.

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

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

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

Подробнее