В языке javascript существует очень много встроенных полезных функций для работы с массивами.
Одной из самых трудно-понимаемых является reduce. В этой статье я расскажу вам зачем нужен метод reduce, как он может быть полезен, а так же покажу реальные use-case в production коде как его применять.
Итак для начала давай те разберем такое понятие как функция высшего порядка. По сути это функция, которая в качестве аргумента принимает другую функцию, а так же может возвращать другую функцию с помощью слова return
Так вот функция reduce - это встроенная функция высшего порядка в языке javascript, которая вызывается на массивах и принимает callback функцию первым аргументом и вызывает ее на каждой итерации массива, а так же начальное значение куда будет складываться результаты всех вызовов callback функции.
Давай те рассмотрим вот такой пример.
const letters = ['k','i','r','i','l','l'];
const name = letters.reduce((letter,word) => {
return letter + word
},'');
В данном коде у нас есть массив букв. И у нас есть задача склеить эти буквы в слово. Мы вызываем функцию reduce и говорим что начальное значение будет пустая строка - второй аргумент функции reduce. Первым аргументом мы передаем ту самую функцию callback, которая первым параметром принимает аккумулятор - то самое значение куда "суммируются" все вызовы на каждой итерации, и так же второй аргумент это текущее значение в массиве (i-ый элемент). На выходе мы получаем слово из букв. То есть reduce помогает нам получить итоговое знчение из массива.
Мне нравиться данная илюстрация для reduce. То есть map функцией мв трансформируем один массив в другой, а reducec сокращаем массив в одно значение.