- Array.reduce(): Сложение
- Пример:
- Давайте рассмотрим этот пример шаг за шагом:
- Редуктор
- Пример:
- Пример:
- Подробное объяснение:
- Начальное значение
- Array.reduce(): Умножение
- Пример:
- Начальное значение для умножения
- Пример:
- Подробное объяснение:
- Пожалуйста, поделитесь своими мыслями в разделе комментариев ниже. Я с удовольствием выслушаю ваши мысли. Или, пожалуйста, загляните ко мне и скажите «👋».
Array.reduce(): Сложение
Одно значение из массива можно вычислить с помощью функции reduce(). Другими словами, массив сжимается в одно значение.
Пример:
const numbers = [20, 13, 5, 31];
const sum = numbers.reduce((accumulator, current) => {
return accumulator + current;
}, 0);
Давайте рассмотрим этот пример шаг за шагом:
-
Мы вызываем метод
.reduce()
для массиваnumbers
. -
Мы присваиваем результат
numbers.reduce()
новой переменнойsum
. -
Для метода reduce требуется два параметра: редуктор и начальное значение.
Редуктор
Пример:
(accumulator, current) => {
return accumulator + current;
}
Это обратный вызов, который применяется к каждому элементу массива, но этот обратный вызов имеет два параметра: accumulator
и current
.
Последнее значение, которое функция reduce вычислила последним, всегда обозначается accumulator
. Кроме того, термин current
относится к одному элементу в массиве.
Пример:
const numbers = [20, 13, 3, 31];
const sum = numbers.reduce((accumulator, current) => {
return accumulator + current;
}, 0);
Подробное объяснение:
При первом выполнении обратного вызова накопитель устанавливается в 0 (из-за начального значения), а current устанавливается в первый элемент массива. Следовательно, аккумулятор равен 0, а ток — 20.
Затем мы выводим accumulator + current
, что равно 0 + 20 = 20. Обновленное значение accumulator
равно 20.
Обратный вызов выполняется второй раз, при этом current = 13
(второй элемент массива) и accumulator = 20
. Мы возвращаем accumulator + current
, что равно 20 + 13 = 33
. Значение accumulator
равно 33.
Обратный вызов выполняется в третий раз, с current = 3
(третий элемент в массиве) и accumulator = 33
. Мы возвращаем accumulator + current
, что равно 33 + 3 = 36
. Значение accumulator
равно 36.
Обратный вызов выполняется в четвертый раз, при этом current = 31
(четвертый элемент в массиве) и accumulator = 36
. Мы возвращаем accumulator + current
, что равно 36 + 31 = 67
. Значение аккумулятора
равно 67.
В массиве нет дополнительных элементов, поэтому при уменьшении получается конечное значение accumulator
, равное 67.
Начальное значение
Reducer
и initialValue
— это два параметра, которые принимает метод .reduce()
(не путать с двумя параметрами reducer
, то есть accumulator
и current
). Значение, которое мы присваиваем accumulator
при первом выполнении обратного вызова, называется initialValue
.
При первом выполнении обратного вызова JavaScript автоматически возьмет ваше initialValue
и передаст его параметру accumulator
в reducer
.
Array.reduce(): Умножение
Пример:
const numbers = [1, 2, 5];
const finalResult = numbers.reduce((accumulator, current) => {
return accumulator * current;
}, 1);
console.log(finalResult); // 10
Начальное значение для умножения
Мы не можем начать умножение со значения 0
. Это связано с тем, что любое число, умноженное на 0, даст 0, 1 * 0 = 0
. Учитывая, что любое число, умноженное на 1, даст то же самое число, число 1
действует как нейтральный множитель при умножении. Пример: 1 * 1 = 1
.
Вот почему мы используем начальное значение 1
для умножения и начальное значение 0
для сложения.
Пример:
const numbers = [1, 2, 5];
const finalResult = numbers.reduce((accumulator, current) => {
return accumulator * current;
}, 1);
Подробное объяснение:
При первом выполнении обратного вызова накопитель устанавливается в 1 (из-за начального значения), а current устанавливается в первый элемент массива. Следовательно, accumulator
равен 1 и current
равен 1.
Затем мы выводим accumulator * current
, что равно 1 * 1 = 1. Обновленное значение accumulator
равно 1.
Обратный вызов выполняется второй раз, при этом current = 2
(второй элемент массива) и accumulator = 1
. Мы возвращаем accumulator * current
, что равно 1 * 2 = 2
. Значение accumulator
равно 2.
Обратный вызов выполняется в третий раз, при этом current = 5
(третий элемент в массиве) и accumulator = 2
. Мы возвращаем accumulator * current
, что равно 2 * 5 = 10
. Значение accumulator
равно 10.
Результат .reduce()
равен 10, который хранится в переменной finalResult.
Пожалуйста, поделитесь своими мыслями в разделе комментариев ниже. Я с удовольствием выслушаю ваши мысли. Или, пожалуйста, загляните ко мне и скажите «👋».