Что такое массивы? — Часть IV

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.

Пожалуйста, поделитесь своими мыслями в разделе комментариев ниже. Я с удовольствием выслушаю ваши мысли. Или, пожалуйста, загляните ко мне и скажите «👋».

Оцените статью
devanswers.ru
Добавить комментарий