mozilla
Vos résultats de recherche

    Array.prototype.reduceRight()

    Résumé

    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.

    Syntaxe

    arr.reduceRight(callback[, valeurInitiale])

    Paramètres

    callback
    La fonction à éxécuter sur chaque valeur de la liste. Elle utilise quatres arguments :
    valeurPrécédente
    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
    Ce paramètre est optionnel. C'est l'objet à utiliser comme premier argument lors du premier appel de la fonction callback.

    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 :

    array.reduceRight(function(valeurPrécédente, valeurCourante, index, array) {
        // ...
    });

    La première fois que la fonction de callback est appelée, valeurPrécédente et valeurCourante peuvent correspondre à un ou deux éléments. Si valeurInitiale est fournie lors de l'appel à reduceRight, alors valeurPrécédente sera égale à valeurInitiale et valeurCourante sera égale à la dernière valeur de la liste. Si valeurInitiale n'est pas fournie, alors valeurPrécédente 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(valeurPrécédente, valeurCourante, index, array) {
        return valeurPrécédente + valeurCourante;
    });
    

    La fonction callback sera appelée quatre fois, avec les arguments et les valeurs de retour de chaque appel suivant :

      valeurPrécédente 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(valeurPrécédente, valeurCourante, index, array) {
        return valeurPrécédente + valeurCourante;
    }, 10);
    
      valeurPrécédente 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

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

    Aplatir une liste de listes

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

    Prothèse d'émulation (polyfill)

    Array.prototype.reduceRight a été ajoutée avec la 5ème édition du standard ECMA-262 (ECMAScript 5). Pour cette raison, il se peut qu'elle ne soit pas présente dans toutes les implémentations du standard. Pour contourner ce problème, vous pouvez ajouter le code suivant au début de vos scripts. Il vous permettra d'utiliser reduceRight au sein d'environnements qui ne supportent pas cette méthode nativement. Cet algorithme est celui exactement spécifié pour ECMAScript 5 si on a bien Object et TypeError qui ont leur valeur d'origine et que callbackfn.call correspond bien à la valeur initiale de Function.prototype.call.

    // 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;
      };
    }

    Spécifications

    Spécification Statut Commentaires
    ECMAScript 5.1 (ECMA-262)
    La définition de 'Array.prototype.reduceRight' dans cette spécification.
    Standard Définition initiale. Implémentée avec JavaScript 1.8.
    ECMAScript 6 (ECMA-262)
    La définition de 'Array.prototype.reduceRight' dans cette spécification.
    Draft  

    Compatibilité des navigateurs

    Fonctionnalité Chrome Firefox (Gecko) Internet Explorer Opera Safari
    Support simple (Oui) 3.0 (1.9) 9 10.5 4.0
    Fonctionnalité Android Chrome pour Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
    Support simple (Oui) (Oui) (Oui) (Oui) (Oui) (Oui)

    Voir aussi

    Étiquettes et contributeurs liés au document

    Contributors to this page: Exirel, SphinxKnight, teoli
    Dernière mise à jour par : SphinxKnight,
    Masquer la barre latérale