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>
.