Полифилл map должен создавать новый массив, вызывать callback только для существующих индексов и сохранять пустые позиции.
Напишите полифилл Array.prototype.map для старой версии JavaScript.
Полифилл 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.