Создание собственной версии функции map

Сохраните сигнатуру callback и thisArg, используйте this как исходную коллекцию и записывайте результаты по индексам. Не вызывайте callback для отсутствующих элементов.

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

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

Сохраните сигнатуру callback и thisArg, используйте this как исходную коллекцию и записывайте результаты по индексам. Не вызывайте callback для отсутствующих элементов.

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

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

Условие

Разработать собственную реализацию метода map, reproducing its behavior without использования встроенной функции. При этом необходимо сохранить оригинальную сигнатуру и обеспечить работу с массивами/коллекциями аналогично стандартному map.

(Кодовые фрагменты оставьте без изменений; при необходимости можно переименовать переменные.)

Ответ

Сохраните сигнатуру callback и thisArg, используйте this как исходную коллекцию и записывайте результаты по индексам. Не вызывайте callback для отсутствующих элементов.

function myMap(callback, thisArg) {
  'use strict';
  if (this == null || typeof callback !== 'function') throw new TypeError('Invalid arguments');
  const source = Object(this);
  const numericLength = Number(source.length);
  const length = Number.isNaN(numericLength) ? 0 :
    Math.min(Math.max(Math.trunc(numericLength), 0), Number.MAX_SAFE_INTEGER);
  const result = new Array(length);
  for (let index = 0; index < length; index++) {
    if (index in source) result[index] = callback.call(thisArg, source[index], index, source);
  }
  return result;
}
myMap.call([1, 2], value => value * 2); // [2, 4]

Поддерживаются обычные массивы и array-like с разумной длиной. Set не имеет индексной структуры и сначала требует преобразования. Это учебная версия без Symbol.species и полного воспроизведения всех крайних случаев спецификации.

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

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

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

Подробнее