JavaScript метод reduceRight()

Определение и применение

JavaScript метод reduceRight() позволяет вызвать функцию обратного вызова один раз для каждого элемента массива в порядке убывания индекса (справа налево). Возвращаемое значение функции предоставляется как аргумент при следующем вызове функции, в результате чего возвращаемое значение последнего вызова становится возвращаемым значением метода (значение вычисляется из элементов массива). Работу метода показывает пример «Как меняется аккумулятор при обходе справа налево».

Для вызова функции обратного вызова в порядке возрастания индекса (слева направо) вы можете воспользоваться методом reduce().

Диапазон элементов, обрабатываемых с помощью метода reduceRight() устанавливается перед первым вызовом функции обратного вызова. Элементы, добавленные за пределами исходной длины после начала обхода, не посещаются. Значение по ещё не посещённому индексу внутри исходного диапазона читается в момент посещения.

Если массив содержит единственный существующий элемент и initialValue не передано, возвращается этот элемент без вызова функции. Если initialValue передано, а существующих элементов нет, возвращается именно initialValue.

Поддержка браузерами

Спецификация: ecma262

Поддерживается во всех основных браузерах с 2015 года.

Показать браузеры
Совместимостьjavascript.builtins.Array.reduceRight
ВозможностьКомпьютерыМобильные
ChromeEdgeFirefoxOperaSafariChrome AndroidFirefox for AndroidOpera AndroidSafari on iOSSamsung BrowserWebView AndroidWebView on iOS
reduceRight✓3✓12✓3✓10.5✓4✓18✓4✓14✓3.2✓1.0✓4.4✓3.2

поддерживаетсяс ограниченияминет поддержкинет данных≤31 — не позднее версии 31

JavaScript синтаксис

JavaScript
array.reduceRight(callback);
array.reduceRight(callback, initialValue);

Спецификация

ECMAScript: Array.prototype.reduceRight.

Значения параметров

Параметры reduceRight()
Параметр Описание
callback Функция обратного вызова, которая будет выполнена один раз для каждого элемента массива в порядке убывания индекса.

Метод передаёт функции все четыре аргумента; в объявлении функции можно оставить только используемые параметры:

  • total - значение, используемое в качестве первого аргумента первого вызова функции обратного вызова (если указан параметр метода initialValue), или будет равно последнему существующему значению в массиве, а параметр currentValue будет равен предпоследнему. Параметр выступает в роли накопителя возвращаемых значений и соответствует ранее возвращенному значению функции обратного вызова.
  • currentValue - значение текущего элемента.
  • currentIndex - индекс массива текущего элемента. При заданном initialValue начинается с последнего существующего элемента, иначе — со следующего существующего элемента при движении влево.
  • arr - массив, к которому принадлежит текущий элемент (по которому происходит проход).

Возвращаемое значение функции предоставляется как аргумент при следующем вызове функции, в результате чего возвращаемое значение последнего вызова становится возвращаемым значением метода (значение вычисляется из элементов массива).

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

Исключения

Исключения reduceRight()
Тип исключения Описание
TypeError Возникает в том случае, если метод вызывается на пустом массиве или массиве только с пустыми позициями и при этом не указано значение параметра initialValue.

Возвращаемое значение

Итоговое значение аккумулятора (накопителя), которое может иметь любой тип. Если вызовов callback не было, возвращается начальное значение или единственный существующий элемент.

Особенности

Без initialValue последний существующий элемент становится аккумулятором и не передаётся как currentValue. Пустой массив или массив только с пустыми позициями без initialValue вызывает TypeError. callback должен быть функцией. Параметра thisValue у reduceRight() нет.

Проверьте это поведение в примере Как начальное значение помогает обработать пустой массив.

Примеры, попробуйте сами

Как меняется аккумулятор при обходе справа налево

В следующем примере мы с Вами детально рассмотрим принцип работы JavaScript метода reduceRight() и получим сумму всех элементов массива: Измените числа или начальное значение и запустите код. Сравните порядок индексов справа налево и итоговую сумму.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
let myArray = [11, 12, 13, 14, 15] // инициализируем переменную, содержащую массив чисел
let myCallback = (total, currentValue, currentIndex, arr) => {
    // инициализируем переменную, содержащую стрелочную функцию, принимающую четыре параметра
    console.log(total, currentValue, currentIndex, arr) // выводим в консоль значение параметров функции
    return total + currentValue // возвращаем значение, полученное от суммы первого параметра со вторым
}

console.log('Итог:', myArray.reduceRight(myCallback))

Для начала мы инициализируем переменную, содержащую массив чисел и переменную, содержащую стрелочную функцию, принимающую четыре параметра. Наша функция будет возвращать значение, полученное от суммы первого параметра со вторым параметром.

Первый параметр впоследствии будет выступать в роли накопителя возвращаемых значений функции, а второй параметр будет соответствовать текущему значению элемента массива по которому мы с помощью метода reduceRight() будем проходить. Кроме того, для демонстрации работы метода reduceRight() мы будем выводить в консоль значения всех параметров функции.

Как работает reduceRight() без начального значения

Давайте рассмотрим следующий пример: Измените числа или начальное значение и запустите код. Сравните порядок индексов справа налево и итоговую сумму.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
const values = [1, 2, 3, 4]
const result = values.reduceRight((total, value) => {
    console.log('Аккумулятор:', total, 'элемент:', value)
    return total + value
})
console.log('Результат:', result)

В этом примере с помощью метода reduceRight() мы получили сумму всех элементов массива в порядке убывания индекса. Обратите внимание, что при первом вызове функции обратного вызова параметр total будет равен последнему значению в массиве, а параметр currentValue будет равен предпоследнему.

Как начальное значение влияет на reduceRight()

Давайте рассмотрим следующий пример, в котором задействуем второй параметр метода reduceRight(): Измените числа или начальное значение и запустите код. Сравните порядок индексов справа налево и итоговую сумму.

index.html
HTML
<p>Результат выполнения выводится в консоль.</p>
main.js
JavaScript
const values = [1, 2, 3, 4]
const result = values.reduceRight((total, value) => {
    console.log('Аккумулятор:', total, 'элемент:', value)
    return total + value
}, 35)
console.log('Результат:', result)

В этом примере мы дополнительно передали методу reduceRight() второй параметр, который будет выступать в роли значения, используемого в качестве первого аргумента первого вызова функции обратного вызова. В предыдущем примере в качестве этого значения выступал последний элемент массива. Обратите внимание, что при использовании дополнительного параметра количество вызовов функции обратного вызова было увеличено на один.

Как начальное значение помогает обработать пустой массив

Измените начальное значение 10 или добавьте элемент. Сравните результат с начальным значением и вызов без него.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="utf-8" />
    <title>Как начальное значение помогает обработать пустой массив</title>
  </head>
  <body></body>
</html>
main.js
JavaScript
const values = []
console.log(
    'С начальным значением:',
    values.reduceRight((total, value) => total + value, 10)
)
try {
    console.log(values.reduceRight((total, value) => total + value))
} catch (error) {
    console.log('Без начального значения:', error.name)
}