[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Array/reduceRight [Back]  [Original]

Array.prototype.reduceRight() - JavaScript | MDN

Esta pgina foi traduzida do ingls pela comunidade. Saiba mais e junte-se comunidade MDN Web Docs.

View in English Always switch to English

Array.prototype.reduceRight()

Baseline Widely available

This feature is well established and works across many devices and browser versions. Its been available across browsers since julho de 2015.

Sumrio

O mtodo reduceRight() aplica uma funo um acumulador e cada valor do array (da direita para esquerda) reduzido para um valor nico.

In this article

Sintaxe

arr.reduceRight(callback[, initialValue])

Parmetros

callback

Funo para executar em cada valor do array, recebendo quatro argumentos:

previousValue

O valor anteriormente retornado na ultima invocao do callback, ou o initialValue, se este for o recebido. (Ver abaixo.)

currentValue

O valor atualmente sendo processado no array.

index

O ndice do valor atualmente sendo processado no array.

array

O array que foi chamado para ser reduzido.

initialValue

Opcional. Objeto para ser usado como argumento inicial da primeria chamada do callback.

Descrio

reduceRight executa a funo callback uma vez para cada elemento presente no array, excluindo buracos no array, recebendo quatro argumentos: o valor inicial (ou o valor da chamada anterior do callback), o valor do elemento atual, o ndice do elemento atual, e o array onde a operao est acontecendo.

A chamada ao callback reduceRight ir parecer com uma chamada assim:

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

A primeira vez que a funo chamada, o previousValue e o currentValue podem ser um de dois valores. Se um initialValue foi recebido na chamada do reduceRight, ento o previousValue sera iqual ao initialValue e o currentValue ser igual ao ultimo valor no array. Se o initialValue no foi recebido, ento o previousValue ser igual ao ultimo valor no array e o currentValue ser igual ao penultimo valor no array.

Se o array vazio e nenhum initialValue foi recebido, TypeError ser lanado. Se o array somente tem um elemento (independentemente da posio dele) e o initialValue no foi recebido, ou se o initialValue foi recebido mas o array vazio, o valor em si ser retornado sem chamar o callback.

Alguns exemplos de execues da funo e como ser parecida a chamada:

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

O callback ser invocado quatro vezes, com os argumentos e valores de retornos em cada chamada ser como o seguinte:

previousValue currentValue index array return value
Primeira chamada 4 3 3 [0, 1, 2, 3, 4] 7
Segunda chamada 7 2 2 [0, 1, 2, 3, 4] 9
Terceira chamada 9 1 1 [0, 1, 2, 3, 4] 10
Quarta chamada 10 0 0 [0, 1, 2, 3, 4] 10

O valor retornado pelo reduceRight ser o valor retornado pela ultima chamada ao callback(10).

E se voc tambm passou um initialValue, o resultado ir ser como a seguir:

js
[0, 1, 2, 3, 4].reduceRight(function (
  previousValue,
  currentValue,
  index,
  array,
) {
  return previousValue + currentValue;
}, 10);
previousValue currentValue index array return value
Primeira chamada 10 4 4 [0, 1, 2, 3, 4] 14
Segunda chamada 14 3 3 [0, 1, 2, 3, 4] 17
Terceira chamada 17 2 2 [0, 1, 2, 3, 4] 19
Quarta chamada 19 1 1 [0, 1, 2, 3, 4] 20
Quinta chamada 20 0 0 [0, 1, 2, 3, 4] 20

O valor retornado pelo reduceRight desta vez ser, obviamente, 20.

Exemplos

Exemplo: Somando todos os valores presente em um array

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

Exemplo: Juntando um array de arrays

js
var flattened = [
  [0, 1],
  [2, 3],
  [4, 5],
].reduceRight(function (a, b) {
  return a.concat(b);
}, []);
// flattened is [4, 5, 2, 3, 0, 1]

Polyfill

reduceRight foi adicionado no padro ECMA-262 em sua Quinta edio; sendo assim pode no estar presente em todas as implementaes deste padro. Voc pode contornar isso adicionando o seguinte codigo ao inicio do seu script, adicionando a possibilidade de uso do reduceRight em implementaes que no o suportam nativamente.

js
// Production steps of ECMA-262, Edition 5, 15.4.4.22
// Reference: http://es5.github.io/#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;
  };
}

Especificaes

Specification
ECMAScript 2027 LanguageSpecification
# sec-array.prototype.reduceright

Compatibilidade com os navegadores

Ver tambm


Web Proxy Viewer  |  New URL  |  Original Page