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
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);accdémarre àvaloreIniziale.- Pour chaque élément, un nouvel
accest calculé. - Le résultat final est le dernier
acc.
Exemples de base : somme et produit
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);
// 60Sans 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
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
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
Définissez `total(items)` : vous recevez un tableau d'objets { price, quantity } et retournez le coût total (somme de price*quantity). Utilisez reduce.
Afficher l'indice
reduce((a, it) => a + it.price * it.quantity, 0)
Solution disponible après 3 tentatives
Exercice de révision
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.
Afficher l'indice
acc[p] = (acc[p] ?? 0) + 1; return acc;
Solution disponible après 3 tentatives