Выбор ответа Junior Функции высшего порядка обновлено

reduce без начального значения и тип аккумулятора

Вопрос

Что произойдёт?

const doubled = [1, 2, 3].reduce((acc, x) => {
  acc.push(x * 2);
  return acc;
});

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: TypeError: acc.push is not a function. Без второго аргумента reduce берёт первый элемент массива как начальный аккумулятор и начинает со второго.

Варианты ответа

  1. doubled станет [2, 4, 6] как с map
  2. doubled станет [1, 4, 6] без первого
  3. TypeError: acc.push is not a functionправильный ответ
  4. doubled станет числом 12, суммой удвоенных

Разбор

Без второго аргумента reduce берёт первый элемент массива как начальный аккумулятор и начинает со второго. Значит acc это число 1, у которого нет метода push: TypeError. Чтобы получить [2, 4, 6], нужен reduce(fn, []), а ещё проще map. Вариант [1, 4, 6] предполагает, что аккумулятор стал массивом из первого элемента, но массивом его никто не делает.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.