Page 168 - Браун Э. - Изучаем JavaScript. Руководство по созданию современных веб-сайтов - 2017
P. 168
результатом сведения к единому значению может быть объект или другой массив -
метод reduce способен воспроизвести возможности функций map и f i l ter (и если
на то пошло, любой другой рассмотренной здесь функции массива).
Метод reduce, подобно map и filter, позволяет предоставить функцию, которая
контролирует результат. Прежде мы уже имели дело с функциями обратного вызова
(callback), первый переданный им элемент всегда является текущим элементом мас
сива. Однако первое значение функции reduce - аккумулятор (accumulator), в ко
торый сводится массив. Остальная часть аргументов вполне ожидаема: текущий эле
мент массива, текущий индекс и сам массив.
Помимо функции обратного вызова, методу reduce передается (необязательно)
начальное значение для аккумулятора. Давайте рассмотрим простой пример - сум
мирование чисел в массиве.
const arr = [ 5 , 7 , 2 , 4 ] ;
const sum = arr . reduce ( ( a , х ) => а + = х , 0 ) ;
Передаваемая в reduce функция получает два параметра: аккумулятор (а) и те
кущий элемент массива (х). В этом примере аккумулятор изначально содержит зна
чение О. Поскольку это наш первый опыт с reduce, рассмотрим все этапы, которые
проходит JavaScript, чтобы лучше понять, как это работает.
1 . Для первого элемента массива (5) вызывается (анонимная) функция. Первона
и
а
чальна, а имеет значение О, х - значение 5. Функция возвращает сумму а х
(5), что становится значением а на следующем этапе.
2. Функция вызывается для второго элемента массива (7). Т е перь а имеет значение
7
5 (переданное с предыдущего этапа), х имеет значение . Функция возвращает
а
сумму а и х (12), которая становится значением а на следующем этапе.
3. Функция вызывается для третьего элемента массива (2). Т е перь а имеет значе
1
ние 2 , а х - значение 2. Функция возвращает сумму а и х ( 1 4 ) .
(
4. Функция вызывается для четвертого, и последнего, элемента массива 4 ) . Те
4
1
и
перь а имеет. значение 4 , а х - значение . Функция возвращает сумму а х
( 1 8 ) , которая и будет возвращаемым значением функции reduce (которое за
тем присваивается константе sum).
Проницательный читатель уже мог бы понять, что в этом очень простом примере
мы даже не должны присваивать значение а; важнее всего то, что возвращается из
функции (помните, что стрелочная нотация не требует явного оператора return),
таким образом, мы можем просто возвращать а + х. Однако в более сложных при
мерах нам может понадобиться сделать с аккумулятором нечто большее. Таким об
разом, модификация аккумулятора в функции - это хорошая привычка.
Магия массивов: метод reduce 1 6 9

