# ReduceRight

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

Синтаксис: array.reduceRight(callback(accumulator, currentValue, currentIndex, array), initialValue

  • callback — функция, которая выполняется для каждого элемента массива. Эта функция принимает следующие аргументы:
    • accumulator — аккумулятор, который накапливает результат. Он и будет тем итоговым значением, которое вернет reduceRight().
    • currentValue — текущий элемент массива, который обрабатывается на данном шаге.
    • currentIndex (необязательный) — индекс текущего элемента (начиная с 0 или с 1, если передан initialValue).
    • array (необязательный) — исходный массив, к которому применяется reduceRight().
  • initialValue (необязательный) — начальное значение аккумулятора. Если не указано, то accumulator принимает значение первого элемента массива, а перебор начинается со второго элемента.

# Пример использования

Развёртывания массива:

const nestedArr = [
  [0, 1],
  [2, 3],
  [4, 5],
];

const flatArr = nestedArr.reduceRight((acc, val) => acc.concat(val), []);

console.log(flatArr); // [4, 5, 2, 3, 0, 1]

Здесь reduceRight() разворачивает массив с конца, так что последний вложенный массив [4, 5] оказывается в начале результирующего массива.

Развёртывание массива строк и преобразование в строку:

const operations = ["+", "3", "*", "5", "-", "2"];

const expression = operations.reduceRight((acc, val) => acc + val);

console.log(expression); // '2-5*3+'

Здесь выражение создается в обратном порядке, начиная с конца массива, что может быть полезно в некоторых случаях, связанных с порядком операций.

Композиция функций:

const compose = (functions) => (x) =>
  functions.reduceRight((acc, fn) => fn(acc), x);

const fn = compose([(x) => x + 3, (x) => x + 1, (x) => 2 * x]);
console.log(fn(4)); // 12

Композиция функций — это процесс последовательного применения нескольких функций к одному значению ([f(x), g(x), h(x)] равна fn(x) = f(g(h(x)))). В данном случае, мы создаем функцию compose(), которая принимает массив функций и использует метод reduceRight() для их последовательного применения с конца к началу.

# Заключение

Метод reduceRight() полезен в ситуациях, где важен обратный порядок обработки данных, например, при работе с вложенными структурами, построении выражений или манипуляциях с данными, где исходный порядок элементов имеет значение.