Вопрос пользователя Maxim Kalinchuk в уроке «Агрегация (reduce)», курс «JS: Функции»

Maxim Kalinchuk

Добрый день!) Я не очень понял что такое 0, в теории, и на что влияет это значение. Переписал код и всё работает без этого нулевого значения. Что это?

const sum = users.reduce((acc, user) => acc + user.amount, 0);
console.log(sum); // => 40

И что означает фраза "Агрегация управляет состоянием (аккумулятором) явно"?

3 0

Сергей Соловьев

Здравствуйте, Максим.

Ноль в том примере, это начальное значение аккумулятора, к которому на первой итерации reduce будет прибавлен кеш, принадлежащий человеку из первого попавшегося вложенного объекта:

const users = [
  { name: 'Igor', amount: 19 },
  { name: 'Danil', amount: 1 },
  { name: 'Vovan', amount: 4 },
  { name: 'Matvey', amount: 16 },
];

Хотя этот параметр, и правда, не является обязательным (так как при его отсутствии на его место был бы тогда назначен первый элемент массива), в данном примере без начального значения аккумулятора редьюс не сможет правильно подсчитать сумму. Если бы элементы массива были числами, то сработало бы, а вот с элементами-объектами - нет.

Можно увидеть ваш переписанный код, который сработал без начального значения acc для задачи о подсчете общей кассы? Мне интересно, чего я не вижу..


"Агрегация управляет аккумулятором явно" означает, что вам нужно позаботиться о том, чтобы явно указать, по какому правилу reduce должен собирать аккумулятор. Имелось в виду, что если некую задачу можно решить через filter или map, которые самостоятельно решают задачу сборки результата, то использовать редьюс не оптимально.

1

Maxim Kalinchuk

Сергей Соловьев, большое спасибо за подробный ответ. По поводу моего кода, он сработал тк это был просто массив с числами внутри и я использовал reduce для подсчёта суммы всех элементов массива :) Теперь всё понятно))

0

Сергей Соловьев

Ну и хорошо)

Успехов!

1

Есть вопрос или хотите участвовать в обсуждении?

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы соглашаетесь c «Политикой конфиденциальности» и «Условиями оказания услуг».

Похожие вопросы

Павел Хлесткин 06 ноября 2020 →

Здравствуйте, что-то совсем не соображу как решить только через reduce. Решил для начала сделать с использо...

Nadia Bogacheva 26 октября 2020 →

Скажите, пожалуйста, где в теории до этого было про object1.concat(object2)?

Денис Семес 26 октября 2020 →

Поправьте меня, если я не прав, но использовать оператор spread в reduce у коллег не приветствуется. Я выпо...

Герман Фоменко 18 октября 2020 →

Задачу я решил. Но я всё равно так и не понял reduce.

Елизавета Коновалова 12 октября 2020 →

Привет! Подскажите, почему не срабатывает с обращением через точку (закоменчено) https://ru.hexlet.io/code_...