Passer au contenu principal
eLearner.app
Module 6 · Leçon 2 sur 422/32 dans le cours~12 min
Leçons du module (2/4)

reduce

reduce est la plus puissante des méthodes fonctionnelles sur les tableaux : elle parcourt la collection en maintenant un accumulateur qui est mis à jour à chaque étape. Une fois le parcours terminé, elle renvoie l'accumulateur.

Signature

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc démarre à valoreIniziale.
  • Pour chaque élément, un nouvel acc est calculé.
  • Le résultat final est le dernier acc.

Exemples de base : somme et produit

JS
const numeri = [3, 1, 4, 1, 5];

const somma = numeri.reduce((a, n) => a + n, 0);
// 14

const prodotto = numeri.reduce((a, n) => a * n, 1);
// 60

Sans valeur initiale, reduce démarre du premier élément (risqué sur des tableaux potentiellement vides → erreur). Passez toujours une valeur initiale quand vous le pouvez.

Construire un objet : comptage

JS
const parole = ['mela', 'pera', 'mela', 'kiwi', 'mela'];

const conteggio = parole.reduce((acc, p) => {
  acc[p] = (acc[p] ?? 0) + 1;
  return acc;
}, {});
// { mela: 3, pera: 1, kiwi: 1 }

Trouver le maximum / minimum

JS
const nums = [3, 7, 1, 9, 4];

const max = nums.reduce((a, n) => (n > a ? n : a), -Infinity);
// 9

(En pratique pour max/min préférez Math.max(...nums) ; ceci est un exemple pédagogique.)

À vous de jouer

Exercice#js.m6.l2.e1
Tentatives : 0Chargement…

Définissez `total(items)` : vous recevez un tableau d'objets { price, quantity } et retournez le coût total (somme de price*quantity). Utilisez reduce.

Chargement de l'éditeur…
Afficher l'indice

reduce((a, it) => a + it.price * it.quantity, 0)

Solution disponible après 3 tentatives

Exercice de révision

Exercice#js.m6.l2.e2
Tentatives : 0Chargement…

Définissez `count(words)` : à partir d'un tableau de chaînes, retournez un objet qui associe chaque chaîne à son nombre d'occurrences. Utilisez reduce avec un objet comme accumulateur.

Chargement de l'éditeur…
Afficher l'indice

acc[p] = (acc[p] ?? 0) + 1; return acc;

Solution disponible après 3 tentatives