На днях, когда я писал статью для Rest Operator, один друг сказал мне, что один из моих примеров можно упростить вызовом функции reduce().

Вот рассматриваемый пример,

const multiply = (...args) => {
  let result = 1;
  for (let i in args) {
     result = result * args[i];
  } 
  return result;
};
multiply(2,2,2) // 8

Я попытаюсь использовать метод reduce() и упростить приведенный выше пример, чтобы сделать его еще более понятным.

Функция уменьшить():

Метод Array.reduce() выполняет функцию редуктора (которую мы предоставляем) в каждом элементе массива, в результате чего получается одно выходное значение.

Поэтому перед его использованием мы должны определить нашу функцию reducer(), которая будет иметь два аргумента (accumulator, currentValue).

Аргумент накопитель — это значение, которое мы получим в итоге.
Аргумент currentValue — это действие, которое мы собираемся выполнить, чтобы получить одно выходное значение.

Определение функции reducer(),

const reducer = (accumulator, currentValue) => { 
      return accumulator * currentValue; 
};

Array.reduce()принимает два аргумента (обратный вызов, initialValue)

Обратный вызов — это наша функция reducer().
Параметр initialValue является необязательным, значение по умолчанию равно 0.

Переписывая нашу функцию умножения,обратный вызов — это функция reducer(), которую мы определили ранее, начальное значение равно 1, потому что мы хотим умножить на 1 в первой итерации, если мы умножим на 0, весь результат будет 0.

let multiply = (...args) => 
    args.reduce((accumulator, currentValue) => { 
      return accumulator * currentValue; 
    }, 1);

Мы можем упростить его еще больше, вызвав функцию reducer() напрямую.

let multiply = (...args) => args.reduce(reducer, 1);

Функция reduce() очень проста, делает ваш код более чистым и упрощает использование массивов.

Большое спасибо и продолжайте кодировать!!!

Йоэль

Я часто делюсь советами по программированию в моем Instagram, вы можете поздороваться со мной в моем Twitterили посмотреть, как я программирую в моем Гитхаб.