Напишите полифилл Array.prototype.map для старой версии JavaScript.

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

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

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

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

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

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

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

Упрощённый вариант по семантике ES5, а не полная реализация современных subclass/species:

if (!Array.prototype.map) {
  Object.defineProperty(Array.prototype, 'map', {
    configurable: true,
    writable: true,
    value: function (callback, thisArg) {
      'use strict';
      if (this == null || typeof callback !== 'function') {
        throw new TypeError('Invalid map arguments');
      }
      var source = Object(this);
      var length = source.length >>> 0;
      var result = new Array(length);
      for (var i = 0; i < length; i++) {
        if (i in source) result[i] = callback.call(thisArg, source[i], i, source);
      }
      return result;
    }
  });
}

Длина фиксируется до обхода, исходный массив метод не меняет. Нужна среда с поддержкой Object.defineProperty для обычных объектов.

Источник: 262.ecma-international.org.

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

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

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

Подробнее