Книга: Выразительный JavaScript
Суммирование при помощи reduce
Суммирование при помощи reduce
Другой популярный пример работы с массивами – получение одиночного значения на основе данных в массиве. Один пример – уже знакомое нам суммирование списка номеров. Другой – поиск человека, родившегося раньше всех.
Операция высшего порядка такого типа называется reduce
(уменьшение; или иногда fold
, свёртывание). Можно представить её в виде складывания массива, по одному элементу за раз. При суммировании чисел мы начинали с нуля, и для каждого элемента комбинировали его с текущей суммой при помощи сложения.
Параметры функции reduce
, кроме массива – комбинирующая функция и начальное значение. Эта функция чуть менее понятная, чем filter
или map
, поэтому обратите на неё пристальное внимание.
function reduce(array, combine, start) {
var current = start;
for (var i = 0; i < array.length; i++)
current = combine(current, array[i]);
return current;
}
console.log(reduce([1, 2, 3, 4], function(a, b) {
return a + b;
}, 0));
// ? 10
Стандартный метод массивов reduce
, который, конечно, работает так же, ещё более удобен. Если массив содержит хотя бы один элемент, вы можете не указывать аргумент start
. Метод возьмёт в качестве стартового значения первый элемент массива и начнёт работу со второго.
Чтобы при помощи reduce
найти самого древнего из известных моих предков, мы можем написать нечто вроде:
console.log(ancestry.reduce(function(min, cur) {
if (cur.born < min.born) return cur;
else return min;
}));
// ? {name: "Pauwels van Haverbeke", born: 1535, …}
- Преобразования при помощи map
- 15.3. Обработка изображений при помощи RMagick
- Факторы помощи
- Получение помощи
- Получение помощи по работе с книгой и компакт-диском
- Получение помощи по Windows SharePoint Services 3.0
- Можно ли при помощи горячих клавиш переводить компьютер в спящий режим?
- Функциональное программирование в Python: lambda, zip, filter, map reduce
- Преобразование в XSL-FO при помощи таблицы стилей XSLT
- 12.8. Работа с данными при помощи запросов
- Привлечение внимания при помощи специальных выкладок
- Глава 11 Линия помощи