HTML: Markup language
CSS: Styling language
JavaScript: Scripting language
Web APIs: Programming interfaces
All web technology
Learn web development
Discover our tools
Get to know MDN better
This page was translated from English by the community. Learn more and join the MDN Web Docs community.
View in English Always switch to English
This feature is well established and works across many devices and browser versions. It’s been available across browsers since июль 2015 г..
Метод reduceRight() применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению.
reduceRight()
arr.reduceRight(callback[, initialValue])
callback
Функция, выполняющаяся для каждого элемента массива, принимает четыре аргумента:
previousValue
Значение, возвращённое предыдущим выполнением функции callback, либо значение initialValue, если оно предоставлено (смотрите пояснения ниже).
initialValue
currentValue
Текущий обрабатываемый элемент массива.
index
Индекс текущего обрабатываемого элемента массива.
array
Массив, для которого была вызвана функция reduceRight.
reduceRight
Необязательный параметр. Объект, используемый в качестве первого аргумента при первом вызове функции 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.
TypeError
Вот так будут выглядеть некоторый примеры прогона функции:
[0, 1, 2, 3, 4].reduceRight( function (previousValue, currentValue, index, array) { return previousValue + currentValue; }, );
Колбэк-функция будет вызвана четыре раза, аргументы и возвращаемое значение при каждом вызове будут следующими:
4
3
[0, 1, 2, 3, 4]
7
2
9
1
10
0
Значение, возвращённое методом reduceRight() будет равным последнему результату выполнения колбэк-функции — 10.
Если же вы зададите начальное значение initialValue, результат будет выглядеть так:
[0, 1, 2, 3, 4].reduceRight(function ( previousValue, currentValue, index, array, ) { return previousValue + currentValue; }, 10);
14
17
19
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() в реализациях, которые не поддерживают этот метод.
Array.prototype.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.22 if ("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; }; }
Enable JavaScript to view this browser compatibility table.
Array.prototype.reduce()