reduce и reduceRight - функции высшего порядка для перебора массива в Js
- Подробности
- Категория: Javascript
- Просмотров: 256
Массив можно перебирать не обычными функциями, а другими более продвинутыми...более продвинутые пользователи пользуются именно ими...
reduce и reduceRight - функции высшего порядка для перебора массива в Javascript.
Первый метод работает с массивом слева направо, а второй наоборот.
Когда вы говорите "reduce" в контексте JavaScript, вы, вероятно, имеете в виду метод массивов "reduce()". Этот метод выполняет редукцию массива к одному значению.
Синтаксис метода reduce():array.reduce(function(total, currentValue, currentIndex, arr), initialValue)
- function(total, currentValue, currentIndex, arr): Функция, выполняющая редукцию. Она принимает четыре аргумента:
- total: Накапливаемое значение, результат выполнения предыдущих вызовов функции (или значение из параметра initialValue при первом вызове).
- currentValue: Текущий обрабатываемый элемент массива.
- currentIndex (необязательный): Индекс текущего обрабатываемого элемента массива.
- arr (необязательный): Сам массив, по которому происходит итерация.
- initialValue (необязательный): Начальное значение для total. Если он не указан, то первый обход массива начинается с индексом 1, а total становится равным первому элементу.
Может быть и выглядит все сложно, но так как много необязательных элементов, то обычно все упрощается...
Пример использования:
// Сложение всех элементов массива
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((total, current) => total + current, 0);
console.log(sum); // Выведет 15 (1 + 2 + 3 + 4 + 5)
// Построение объекта на основе массива
const data = [
{ id: 1, value: 'a' },
{ id: 2, value: 'b' },
{ id: 3, value: 'c' }
];
const result = data.reduce((obj, item) => {
obj[item.id] = item.value;
return obj;
}, {});
console.log(result); // Выведет { '1': 'a', '2': 'b', '3': 'c' }
Вот примеры использования метода reduce() без использования стрелочных функций:
// Сложение всех элементов массива
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce(function(total, current) {
return total + current;
}, 0);
console.log(sum); // Выведет 15 (1 + 2 + 3 + 4 + 5)
// Построение объекта на основе массива
const data = [
{ id: 1, value: 'a' },
{ id: 2, value: 'b' },
{ id: 3, value: 'c' }
];
const result = data.reduce(function(obj, item) {
obj[item.id] = item.value;
return obj;
}, {});
console.log(result); // Выведет { '1': 'a', '2': 'b', '3': 'c' }
В обоих примерах мы использовали анонимные функции вместо стрелочных. В первом примере функция принимает два аргумента total и current и возвращает их сумму. Во втором примере функция принимает obj и item, добавляет в obj новый элемент с ключом item.id и значением item.value, после чего возвращает измененный obj.
В первом примере мы используем reduce() для нахождения суммы всех элементов в массиве. Во втором примере мы строим объект на основе массива, где ключами будут значения поля id, а значениями — поля value.