Movatterモバイル変換


[0]ホーム

URL:


MDN Web Docs

Эта страница была переведена с английского языка силами сообщества. Вы тоже можете внести свой вклад, присоединившись к русскоязычному сообществу MDN Web Docs.

Array.prototype.reduceRight()

BaselineWidely available

Сводка

МетодreduceRight() применяет функцию к аккумулятору и каждому значению массива (справа-налево), сводя его к одному значению.

Синтаксис

arr.reduceRight(callback[, initialValue])

Параметры

callback

Функция, выполняющаяся для каждого элемента массива, принимает четыре аргумента:

previousValue

Значение, возвращённое предыдущим выполнением функцииcallback, либо значениеinitialValue, если оно предоставлено (смотрите пояснения ниже).

currentValue

Текущий обрабатываемый элемент массива.

index

Индекс текущего обрабатываемого элемента массива.

array

Массив, для которого была вызвана функцияreduceRight.

initialValue

Необязательный параметр. Объект, используемый в качестве первого аргумента при первом вызове функцииcallback.

Описание

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

Вызов колбэк-функцииcallback будет выглядеть так:

js
array.reduceRight(function (previousValue, currentValue, index, array) {  // ...});

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

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

Вот так будут выглядеть некоторый примеры прогона функции:

js
[0, 1, 2, 3, 4].reduceRight(  function (previousValue, currentValue, index, array) {    return previousValue + currentValue;  },);

Колбэк-функция будет вызвана четыре раза, аргументы и возвращаемое значение при каждом вызове будут следующими:

previousValuecurrentValueindexarrayвозвращаемое значение
первый вызов433[0, 1, 2, 3, 4]7
второй вызов722[0, 1, 2, 3, 4]9
третий вызов911[0, 1, 2, 3, 4]10
четвёртый вызов1000[0, 1, 2, 3, 4]10

Значение, возвращённое методомreduceRight() будет равным последнему результату выполнения колбэк-функции —10.

Если же вы зададите начальное значениеinitialValue, результат будет выглядеть так:

js
[0, 1, 2, 3, 4].reduceRight(function (  previousValue,  currentValue,  index,  array,) {  return previousValue + currentValue;}, 10);
previousValuecurrentValueindexarrayвозвращаемое значение
первый вызов1044[0, 1, 2, 3, 4]14
второй вызов1433[0, 1, 2, 3, 4]17
третий вызов1722[0, 1, 2, 3, 4]19
четвёртый вызов1911[0, 1, 2, 3, 4]20
пятый вызов2000[0, 1, 2, 3, 4]20

Значение, возвращённое методомreduceRight() на этот раз, конечно же, будет равным20.

Примеры

Пример: суммирование всех значений в массиве

js
var total = [0, 1, 2, 3].reduceRight(function (a, b) {  return a + b;});// total == 6

Пример: разворачивание массива массивов

js
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() в реализациях, которые не поддерживают этот метод.

js
// Шаги алгоритма 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

Совместимость с браузерами

Смотрите также

Help improve MDN

Learn how to contribute.

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp