--- 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 ---
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.
Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner https://github.com/mdn/interactive-examples et à envoyer une pull request !
Voir également {{jsxref("Array.prototype.reduce()")}} pour une méthode qui réduit de gauche à droite.
arr.reduceRight(callback[, valeurInitiale])
callbackaccumulatorcallback, ou valeurInitial si elle est fournie. (Voir ci-après.)valeurCouranteindexarrayreduceRight() est appelée.valeurInitiale {{optional_inline}}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")}}.La valeur obtenue grâce à la fonction de réduction.
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 :
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 :
[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 :
[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.
var total = [0, 1, 2, 3].reduceRight(function(a, b) {
return a + b;
});
// total == 6
var aplati = [[0, 1], [2, 3], [4, 5]].reduceRight(function(a, b) {
return a.concat(b);
}, []);
// aplati [4, 5, 2, 3, 0, 1]
reduce et reduceRightvar 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"
reduceLa 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.
/** * * 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é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')}} |
{{Compat("javascript.builtins.Array.reduceRight")}}