#
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() полезен в ситуациях, где важен обратный порядок обработки данных, например, при работе с вложенными структурами, построении выражений или манипуляциях с данными, где исходный порядок элементов имеет значение.