---
title: Array.prototype.reduceRight()
slug: Web/JavaScript/Reference/Global_Objects/Array/ReduceRight
tags:
  - Array
  - ECMAScript 5
  - JavaScript
  - Méthode
  - Prototype
  - Reference
translation_of: Web/JavaScript/Reference/Global_Objects/Array/ReduceRight
original_slug: Web/JavaScript/Reference/Objets_globaux/Array/reduceRight
---
{{JSRef}}
La méthode **`reduceRight()`** applique une fonction sur un accumulateur et chaque valeur d'un tableau (de la droite vers la gauche) de sorte à réduire le tableau en une seule valeur.
{{EmbedInteractiveExample("pages/js/array-reduce-right.html")}}
Voir également {{jsxref("Array.prototype.reduce()")}} pour une méthode qui réduit de gauche à droite.
## Syntaxe
    arr.reduceRight(callback[, valeurInitiale])
### Paramètres
- `callback`
  - : La fonction à éxécuter sur chaque valeur de la liste. Elle utilise quatres arguments :
    - `accumulator`
      - : La valeur précédemment retournée par le dernier appel de la fonction `callback`, ou `valeurInitial` si elle est fournie. (Voir ci-après.)
    - `valeurCourante`
      - : La valeur de l'élément courant dans le tableau.
    - `index`
      - : L'index de l'élément du tableau actuellement manipulé.
    - `array`
      - : Le tableau sur lequel `reduceRight()` est appelée.
- `valeurInitiale` {{optional_inline}}
  - : C'est l'objet à utiliser comme accumulateur/premier argument lors du premier appel de la fonction `callback`. Si aucune valeur n'est fournie, c'est le dernier élément du tableau qui sera utilisé. Si on appelle `reduce()` ou `reduceRight()` sur un tableau vide sans fournir de valeur initiale, on aura une exception {{jsxref("TypeError")}}.
### Valeur de retour
La valeur obtenue grâce à la fonction de réduction.
## Description
`reduceRight` exécute la fonction `callback` une fois pour chaque élément présent dans le tableau, les éléments vides sont ignorés. La fonction `callback` utilise quatre arguments : la valeur initiale (ou la valeur retournée par le précédent appel de la fonction `callback`), la valeur de l'élément courant, l'index de l'élément courant, et le tableau qui est parcouru.
L'usage de `reduceRight` avec définition d'un `callback` devrait ressembler à ceci :
```js
array.reduceRight(function(accumulator, valeurCourante, index, array) {
    // ...
});
```
La première fois que la fonction de callback est appelée, `accumulator` et `valeurCourante` peuvent correspondre à un ou deux éléments. Si `valeurInitiale` est fournie lors de l'appel à `reduceRight`, alors `accumulator` sera égale à `valeurInitiale` et `valeurCourante` sera égale à la dernière valeur de la liste. Si `valeurInitiale` n'est pas fournie, alors `accumulator` sera égale à la dernière valeur de la liste, et `valeurCourante` sera alors égale à l'avant-dernière valeur du tableau.
Si on utilise la méthode `reduceRight` de la façon suivante :
```js
[0, 1, 2, 3, 4].reduceRight(function(accumulator, valeurCourante, index, array) {
    return accumulator + valeurCourante;
});
```
La fonction `callback` sera appelée quatre fois, avec les arguments et les valeurs de retour de chaque appel suivant :
  
    
      | callback | accumulator | valeurCourante | index | array | Valeur renvoyée | 
  
  
    
      | premier appel | 4 | 3 | 3 | [0,1,2,3,4] | 7 | 
    
      | second appel | 7 | 2 | 2 | [0,1,2,3,4] | 9 | 
    
      | troisième appel | 9 | 1 | 1 | [0,1,2,3,4] | 10 | 
    
      | quatrième appel | 10 | 0 | 0 | [0,1,2,3,4] | 10 | 
  
La valeur retournée par `reduceRight` sera alors celle du dernier appel de la fonction `callback` (`10`).
Si vous fournissez une valeur initiale comme second argument à l'appel de `reduceRight`, le résultat sera alors le suivant :
```js
[0, 1, 2, 3, 4].reduceRight(function(accumulator, valeurCourante, index, array) {
    return accumulator + valeurCourante;
}, 10);
```
  
    
      |  | accumulator | valeurCourante | index | array | Valeur renvoyée | 
  
  
    
      | premier appel | 10 | 4 | 4 | [0,1,2,3,4] | 14 | 
    
      | second appel | 14 | 3 | 3 | [0,1,2,3,4] | 17 | 
    
      | troisième appel | 17 | 2 | 2 | [0,1,2,3,4] | 19 | 
    
      | quatrième appel | 19 | 1 | 1 | [0,1,2,3,4] | 20 | 
    
      | cinquième appel | 20 | 0 | 0 | [0,1,2,3,4] | 20 | 
  
La valeur renvoyée par `reduceRight` sera ici `20`.
## Exemples
### Additionner toutes les valeurs d'une liste
```js
var total = [0, 1, 2, 3].reduceRight(function(a, b) {
    return a + b;
});
// total == 6
```
### Aplatir une liste de listes
```js
var aplati = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
    return a.concat(b);
}, []);
// aplati [4, 5, 2, 3, 0, 1]
```
### Différence entre `reduce` et `reduceRight`
```js
var a = ['1', '2', '3', '4','5']
var gauche = a.reduce(function(prev, cur) {
  return prev + cur;
});
var droite = a.reduceRight(function(prev, cur) {
  return prev + cur;
});
console.log(gauche); // "12345"
console.log(droite); // "54321"
```
### Composition de fonctions à l'aide de `reduce`
La composition de fonctions consiste en l'enchaînement de n fonctions l'une après l'autre (où les appels sont généralement exécutés de droite à gauche.
```js
/**
 *
 * h(x) = f(g(x))
 *
 * https://fr.wikipedia.org/wiki/Composition_de_fonctions
 */
const compose = (...args) => (value) => args.reduceRight((acc, fn) => fn(acc), value)
// On incrémente un nombre passé en argument
const inc = (n) => n + 1
// On double la valeur passée en argument
const double = (n) => n * 2
// On compose double(inc(x))
compose(double, inc)(2) // 6
// On compose inc(double(x))
compose(inc, double)(2) // 5
```
## Spécifications
| Spécification                                                                                                            | État                         | Commentaires                                          |
| ------------------------------------------------------------------------------------------------------------------------ | ---------------------------- | ----------------------------------------------------- |
| {{SpecName('ES5.1', '#sec-15.4.4.22', 'Array.prototype.reduceRight')}}                             | {{Spec2('ES5.1')}}     | Définition initiale. Implémentée avec JavaScript 1.8. |
| {{SpecName('ES6', '#sec-array.prototype.reduceright', 'Array.prototype.reduceRight')}}     | {{Spec2('ES6')}}         |                                                       |
| {{SpecName('ESDraft', '#sec-array.prototype.reduceright', 'Array.prototype.reduceRight')}} | {{Spec2('ESDraft')}} |                                                       |
## Compatibilité des navigateurs
{{Compat("javascript.builtins.Array.reduceRight")}}
## Voir aussi
- {{jsxref("Array.prototype.reduce()")}}