Map создаёт новый массив той же длины, преобразуя существующие элементы через callback. Для разреженного массива отсутствующие индексы остаются дырками.
Самостоятельная реализация функции map
Map создаёт новый массив той же длины, преобразуя существующие элементы через callback. Для разреженного массива отсутствующие индексы остаются дырками.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Разработать собственную реализацию метода map, аналогичного стандартному, без использования готовых библиотек.
Ответ
Map создаёт новый массив той же длины, преобразуя существующие элементы через callback. Для разреженного массива отсутствующие индексы остаются дырками.
Учебный вариант для обычных массивов:
function map(array, callback, thisArg) {
if (!Array.isArray(array) || typeof callback !== 'function') throw new TypeError('Нужны массив и 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;
}
Длина фиксируется до обхода; сама функция не меняет вход. Это не полный spec-polyfill для array-like объектов, subclass species и всех экзотических объектов.