Array.prototype.reduceRight()
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Сводка
МетодreduceRight()
применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению.
Синтаксис
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 |