Array.reduceRight()
Применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению.
Спецификация: ECMAScript 5.1 (ECMA-262)Синтаксис
array.reduceRight(function callback(total, currentValue, currentIndex, arr), initialValue)
Параметры
- callback
- Функция, выполняющаяся для каждого элемента массива, принимает четыре аргумента:
- total – значение из предыдущего вызова функции обратного вызова. Если значение
initialValueпредоставляется в методreduceRight, тоtotalявляется значениемinitialValueпри первом вызове функции. - currentValue – текущий обрабатываемый элемент массива.
- currentIndex – индекс текущего обрабатываемого элемента массива.
- arr – массив, к которому принадлежит текущий элемент (по которому происходит проход).
- total – значение из предыдущего вызова функции обратного вызова. Если значение
- 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 используется для разворачивания массива, состоящего из трёх массивов:
Поддержка браузерами
| Метод | |||||||
| reduceRight | Да | 10.5 | Да | 4.0 | 3.0 | 9.0 | Да |


Комментарии
<code>, несколько строчек кода — в теги<pre><code>...ваш код...</code></pre>.