Get to know MDN better
Esta página foi traduzida do inglês pela comunidade. Saiba mais e junte-se à comunidade MDN Web Docs.
This feature is well established and works across many devices and browser versions. It’s been available across browsers since julho de 2015.
O método reduce() executa uma função reducer (fornecida por você) para cada elemento do array, resultando num único valor de retorno.
A função reducer recebe quatro parâmetros:
O valor de retorno da sua função reducer é atribuída ao acumulador. O acumulador, com seu valor atualizado, é repassado para cada iteração subsequente pelo array, que por fim, se tornará o valor resultante, único, final.
Função que é executada em cada valor no array (exceto no primeiro, se nenhum valorInicial for passado); recebe quatro argumentos:
acumuladorÉ o valor inicial (ou o valor do callback anterior). Este valor inicia com o valorInicial e será retornado na última iteração.
valorAtualOpcional. O índice do elemento atual que está sendo processado no array. Começa a partir do index 0 se um valorInicial for fornecido. Do contrário, começa do index 1.
valorInicialOpcional. Valor a ser usado como o primeiro argumento da primeira chamada da função callback. Se nenhum valorInicial é fornecido, o primeiro elemento do array será usado como o valor inicial do acumulador e o valorAtual não será lido. Chamar reduce() em uma array vazia sem valor inicial retornará um erro.
O valor que resulta da execução da função de callback do "reducer" até a conclusão de todo o array.
O método reduce() executa a função de callback uma vez para cada elemento presente no array, excluindo furos (valores indefinidos), recebendo quatro argumentos:
A primeira vez que o callback é chamado, o acumulador e o valorAtual podem ter um de dois valores possíveis. Se o valorInicial tiver sido fornecido na chamada à função reduce(), então o acumulador será igual ao valorInicial e o valorAtual será igual ao primeiro valor no array. Caso nenhum valorInicial seja fornecido, acumulador será igual ao primeiro valor no array, e valorAtual será igual ao segundo.
Nota: Se o valorInicial não tiver sido passado como argumento, então reduce() executará o callback da função começando a partir do índice 1 (index 1), pulando o primeiro índice (index 0). Se o valorInicial for passado como argumento, a função irá começar no index 0.
Se a array estiver vazia e o valorInicial não tiver sido informado, uma exceção do tipo TypeError será lançada.
Se a array possuir somente um elemento (independente da posição) e o valorInicial não tiver sido fornecido, ou se valorInicial for fornecido, mas a array estiver vazia, o valor será retornado sem que a função de callback seja chamada.
É mais seguro prover um valorInicial, porque existem até quatro possíveis saídas sem o valorInicial, como mostrado no exemplo:
Suponha que o seguinte uso de reduce() tenha ocorrido:
O callback será invocado quatro vezes, com os argumentos e valores em cada chamada sendo:
| primeira chamada | 0 | 1 | 1 | [0, 1, 2, 3, 4] | 1 |
| segunda chamada | 1 | 2 | 2 | [0, 1, 2, 3, 4] | 3 |
| terceira chamada | 3 | 3 | 3 | [0, 1, 2, 3, 4] | 6 |
| quarta chamada | 6 | 4 | 4 | [0, 1, 2, 3, 4] | 10 |
O valor retornado pelo reduce será o da última chamada à callback (10).
Você também pode usar uma Arrow Function em vez de uma função completa. O código abaixo produz a mesma saída que o código do bloco acima:
Se você informar um valorInicial como o segundo argumento de reduce, o resultado será:
| primeira chamada | 10 | 0 | 0 | [0, 1, 2, 3, 4] | 10 |
| segunda chamada | 10 | 1 | 1 | [0, 1, 2, 3, 4] | 11 |
| terceira chamada | 11 | 2 | 2 | [0, 1, 2, 3, 4] | 13 |
| quarta chamada | 13 | 3 | 3 | [0, 1, 2, 3, 4] | 16 |
| quinta chamada | 16 | 4 | 4 | [0, 1, 2, 3, 4] | 20 |
O retorno da última chamada 20,é retornado como resultado da função reduce().
outra alternativa é usar uma arrow function:
Para resumir os valores contidos em um array, você deve fornecer um valorInicial, para que cada item passe por sua função.
Utilizando uma arrow function:
Utilizando uma arrow function:
Nota: Se você estiver usando um ambiente compatível com Set and Array.from(), você pode usar let orderedArray = Array.from(new Set(myArray)) para obter um array em que os itens duplicados tenham sido removidos.
Usar Array.filter() seguido por Array.map() faz com que o array seja percorrido duas vezes. Você pode obter o mesmo resultado percorrendo o array apenas uma vez com Array.reduce(), o que é, portanto, mais eficiente. (Se você gosta de for loops, você pode usar filter e map percorrendo o array apenas uma vez com Array.forEach()).
Array.prototype.reduce foi adicionado ao padrão ECMA-262 na quinta edição; e portanto, pode não estar presente em todas as implementações do padrão. Você pode contornar isso inserindo o código a seguir no início de seus scripts, permitindo o uso do reduce() em implementações que não possuem suporte nativo a ele.
| ECMAScript® 2027 Language Specification # sec-array.prototype.reduce |
Enable JavaScript to view this browser compatibility table.
This page was last modified on 17 de fev. de 2025 by MDN contributors.
Your blueprint for a better internet.
Visit Mozilla Corporation’s not-for-profit parent, the Mozilla Foundation.
Portions of this content are ©1998–2026 by individual mozilla.org contributors. Content available under a Creative Commons license.