This page was translated from English by the community.Learn more and join the MDN Web Docs community.
Array.prototype.reduceRight()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
Сводка
МетодreduceRight() применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению.
In this article
Синтаксис
arr.reduceRight(callback[, initialValue])
Параметры
callbackФункция, выполняющаяся для каждого элемента массива, принимает четыре аргумента:
previousValueЗначение, возвращённое предыдущим выполнением функции
callback, либо значениеinitialValue, если оно предоставлено (смотрите пояснения ниже).currentValueТекущий обрабатываемый элемент массива.
indexИндекс текущего обрабатываемого элемента массива.
arrayМассив, для которого была вызвана функция
reduceRight.
initialValueНеобязательный параметр. Объект, используемый в качестве первого аргумента при первом вызове функции
callback.
Описание
МетодreduceRight() выполняет функциюcallback один раз для каждого элемента, присутствующего в массиве, за исключением пустот, принимая четыре аргумента: начальное значение (или значение от предыдущего вызоваcallback), значение текущего элемента, текущий индекс и массив, по которому происходит итерация.
Вызов колбэк-функцииcallback будет выглядеть так:
array.reduceRight(function (previousValue, currentValue, index, array) { // ...});При первом вызове функции, параметрыpreviousValue иcurrentValue могут принимать одно из двух значений. Если при вызовеreduceRight() передан аргументinitialValue, то значениеpreviousValue будет равным значениюinitialValue, а значениеcurrentValue будет равным последнему значению в массиве. Если аргументinitialValue не задан, то значениеpreviousValue будет равным последнему значению в массиве, а значениеcurrentValue будет равным второму с конца значению в массиве.
Если массив пустой и аргументinitialValue не указан, будет брошено исключениеTypeError. Если массив состоит только из одного элемента (независимо от его положения в массиве) и аргументinitialValue не указан, или если аргументinitialValue указан, но массив пустой, то будет возвращено одно это значение, без вызова функцииcallback.
Вот так будут выглядеть некоторый примеры прогона функции:
[0, 1, 2, 3, 4].reduceRight( function (previousValue, currentValue, index, array) { return previousValue + currentValue; },);Колбэк-функция будет вызвана четыре раза, аргументы и возвращаемое значение при каждом вызове будут следующими:
previousValue | currentValue | index | array | возвращаемое значение | |
|---|---|---|---|---|---|
| первый вызов | 4 | 3 | 3 | [0, 1, 2, 3, 4] | 7 |
| второй вызов | 7 | 2 | 2 | [0, 1, 2, 3, 4] | 9 |
| третий вызов | 9 | 1 | 1 | [0, 1, 2, 3, 4] | 10 |
| четвёртый вызов | 10 | 0 | 0 | [0, 1, 2, 3, 4] | 10 |
Значение, возвращённое методомreduceRight() будет равным последнему результату выполнения колбэк-функции —10.
Если же вы зададите начальное значениеinitialValue, результат будет выглядеть так:
[0, 1, 2, 3, 4].reduceRight(function ( previousValue, currentValue, index, array,) { return previousValue + currentValue;}, 10);previousValue | currentValue | index | array | возвращаемое значение | |
|---|---|---|---|---|---|
| первый вызов | 10 | 4 | 4 | [0, 1, 2, 3, 4] | 14 |
| второй вызов | 14 | 3 | 3 | [0, 1, 2, 3, 4] | 17 |
| третий вызов | 17 | 2 | 2 | [0, 1, 2, 3, 4] | 19 |
| четвёртый вызов | 19 | 1 | 1 | [0, 1, 2, 3, 4] | 20 |
| пятый вызов | 20 | 0 | 0 | [0, 1, 2, 3, 4] | 20 |
Значение, возвращённое методомreduceRight() на этот раз, конечно же, будет равным20.
Примеры
>Пример: суммирование всех значений в массиве
var total = [0, 1, 2, 3].reduceRight(function (a, b) { return a + b;});// total == 6Пример: разворачивание массива массивов
var flattened = [ [0, 1], [2, 3], [4, 5],].reduceRight(function (a, b) { return a.concat(b);}, []);// flattened равен [4, 5, 2, 3, 0, 1]Полифил
МетодArray.prototype.reduceRight() был добавлен к стандарту ECMA-262 в 5-м издании; поэтому он может отсутствовать в других реализациях стандарта. Вы можете работать с ним, добавив следующий код в начало ваших скриптов, он позволяет использоватьreduceRight() в реализациях, которые не поддерживают этот метод.
// Шаги алгоритма ECMA-262, 5-е издание, 15.4.4.22// Ссылка (en): http://es5.github.io/#x15.4.4.22// Ссылка (ru): http://es5.javascript.ru/x15.4.html#x15.4.4.22if ("function" !== typeof Array.prototype.reduceRight) { Array.prototype.reduceRight = function (callback /*, initialValue*/) { "use strict"; if (null === this || "undefined" === typeof this) { throw new TypeError("Array.prototype.reduce called on null or undefined"); } if ("function" !== typeof callback) { throw new TypeError(callback + " is not a function"); } var t = Object(this), len = t.length >>> 0, k = len - 1, value; if (arguments.length >= 2) { value = arguments[1]; } else { while (k >= 0 && (!k) in t) { k--; } if (k < 0) { throw new TypeError("Reduce of empty array with no initial value"); } value = t[k--]; } for (; k >= 0; k--) { if (k in t) { value = callback(value, t[k], k, t); } } return value; };}Спецификации
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-array.prototype.reduceright> |