Применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению.

Спецификация: ECMAScript 5.1 (ECMA-262)
array.reduceRight(function callback(total, currentValue, currentIndex, arr), initialValue)

Параметры

callback
Функция, выполняющаяся для каждого элемента массива, принимает четыре аргумента:
  • total – значение из предыдущего вызова функции обратного вызова. Если значение initialValue предоставляется в метод reduceRight, то total является значением initialValue при первом вызове функции.
  • currentValue – текущий обрабатываемый элемент массива.
  • currentIndex – индекс текущего обрабатываемого элемента массива.
  • arr – массив, к которому принадлежит текущий элемент (по которому происходит проход).
initialValue
Необязательный параметр. Объект, используемый в качестве первого аргумента при первом вызове функции callback.

Возвращает накопленный результат с последнего вызова функции обратного вызова.

Метод reduceRight() используется для вычисления на основе массива какого-либо единого значения, иначе говорят «для свёртки массива».

Он применяет функцию callback по очереди к каждому элементу массива справа налево, сохраняя при этом промежуточный результат.

При первом вызове функции, параметры total и currentValue могут принимать одно из двух значений:

  • Если при вызове reduceRight() передан аргумент initialValue, то значение total будет равным значению initialValue, а значение currentValue будет равным последнему значению в массиве.
  • Если аргумент initialValue не задан, то значение total будет равным последнему значению в массиве, а значение currentValue будет равным второму значению с конца в массиве.

Если массив пустой, а аргумент initialValue не указан, то будет сгенерировано исключение TypeError.
В случае, если массив состоит только из одного элемента и аргумент initialValue не указан, или если аргумент initialValue указан, но массив пустой, то будет возвращено одно это значение. При этом функции callback вызываться не будет.

Примечание: reduceRight() не вызывает функцию для элементов массива без значений.

Разберём работу метода reduceRight() на примере.

Например, в качестве «свёртки» мы хотим получить сумму всех элементов массива numbers:

Выполнить код »

При первом запуске total – исходное значение, с которого начинаются вычисления, равно 10 (второй аргумент метода reduce()initialValue). Значение currentValue будет равным последнему значению в массиве, т. е. – 5.

Сначала функция вызывается с этим начальным значением и последним элементом массива, результат запоминается и передаётся в следующий вызов, уже со вторым аргументом массива, затем новое значение участвует в вычислениях с третьим аргументом и так далее.

  total currentValue currentIndex arr возвращаемое значение
первый вызов 10 5 4 [1, 2, 3, 4, 5] 15
второй вызов 10+5 4 3 [1, 2, 3, 4, 5] 19
третий вызов 10+5+4 3 2 [1, 2, 3, 4, 5] 22
четвёртый вызов 10+5+4+3 2 1 [1, 2, 3, 4, 5] 24
пятый вызов 10+5+4+3+2 1 0 [1, 2, 3, 4, 5] 25

Как видно из таблицы, результат предыдущего вызова передаётся в первый аргумент следующего и т. д.

Посмотрим, какой у нас получится результат, если не указать аргумент initialValue в вызове arr.reduceRight:

Выполнить код »

При отсутствии аргумента initialValue в качестве первого значения берётся последний элемент массива – 5, а перебор элементов начинается со второго с конца.

Таблица вычислений будет выглядеть так:

  total currentValue currentIndex arr возвращаемое значение
первый вызов 5 4 3 [1, 2, 3, 4, 5] 9
второй вызов 5+4 3 2 [1, 2, 3, 4, 5] 12
третий вызов 5+4+3 2 1 [1, 2, 3, 4, 5] 14
четвёртый вызов 5+4+3+2 1 0 [1, 2, 3, 4, 5] 15

В следующем примере метод reduceRight используется для разворачивания массива, состоящего из трёх массивов:

Выполнить код »

Комментарии

пожелания к комментариям…
  • Приветствуются комментарии, соответствующие теме урока: вопросы, ответы, предложения.
  • Одну строчку кода оборачивайте в тег <code>, несколько строчек кода — в теги <pre><code>...ваш код...</code></pre>.
  • Допускаются ссылки на онлайн-песочницы (codepen, plnkr, JSBin и др.).