Для обычного массива выделите результат той же длины и примените mapper к каждому существующему индексу. Пропущенные позиции можно сохранить, как у стандартного map.
Создание собственного метода map
Для обычного массива выделите результат той же длины и примените mapper к каждому существующему индексу. Пропущенные позиции можно сохранить, как у стандартного map.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Реализуйте свою версию функции map: она должна принимать коллекцию (например, массив) и функцию‑преобразователь, а затем возвращать новый массив, состоящий из результатов применения переданной функции к каждому элементу исходной коллекции.
Ответ
Для обычного массива выделите результат той же длины и примените mapper к каждому существующему индексу. Пропущенные позиции можно сохранить, как у стандартного map.
function mapArray(array, mapper, thisArg) {
if (typeof mapper !== 'function') throw new TypeError('Нужна функция');
const length = array.length, result = Array(length);
for (let index = 0; index < length; index++) {
if (index in array) result[index] = mapper.call(thisArg, array[index], index, array);
}
return result;
}
Начальная длина фиксируется до callback: добавленные позже элементы за этой границей не обрабатываются. Массив результата новый, но mapper может сам менять объекты или вход. Это учебная версия для массивов, не полный generic-polyfill со Species. Время O(n), память O(n).