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