JavaScriptTableaux

Array.prototype.reduce()

Réduit tout le tableau à une seule valeur, par exemple une somme, un objet ou un nouveau tableau.

Renvoie
La valeur finale de l’accumulateur.
Modifie l’original
Non
Sur cette page

Exemple

#
JavaScript
const cart = [
  { name: 'Cours HTML', price: 49 },
  { name: 'Cours CSS', price: 59 },
  { name: 'Cours JS', price: 79 }
]

const total = cart.reduce((sum, item) => sum + item.price, 0)
console.log(total)
Console
187

Définition et utilisation

#

La méthode reduce() parcourt le tableau et, à chaque étape, combine l’élément courant avec le résultat accumulé jusque-là, appelé l’accumulateur. À la fin, elle renvoie la valeur finale de l’accumulateur.

Elle permet de calculer une somme ou une moyenne, de regrouper des éléments dans un objet, d’aplatir un tableau ou de construire un compteur d’occurrences. C’est la méthode de tableau la plus polyvalente.

Donnez toujours une valeur initiale en second argument. Sans elle, reduce() utilise le premier élément comme point de départ, et lève une erreur sur un tableau vide.

Syntaxe

#
Syntaxe
array.reduce(callbackFn)
array.reduce(callbackFn, initialValue)

Paramètres

#
  • callbackFn

    function (accumulator, element, index, array)

    Fonction qui combine l’accumulateur avec l’élément courant. Son résultat devient le nouvel accumulateur.
  • initialValue

    optionnelle

    Valeur initiale de l’accumulateur, par exemple 0, [] ou {}.

Plus d’exemples

#
Compter les occurrences
JavaScript
const answers = ['A', 'C', 'A', 'B', 'A', 'C']

const counts = answers.reduce((acc, answer) => {
  acc[answer] = (acc[answer] ?? 0) + 1
  return acc
}, {})

console.log(counts)
Console
{ A: 3, C: 2, B: 1 }
Moyenne
JavaScript
const points = [80, 95, 70]
const average = points.reduce((sum, p) => sum + p, 0) / points.length
console.log(average)
Console
81.66666666666667

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Si reduce() devient difficile à lire, une simple boucle for...of est parfois un meilleur choix.
  • Pour regrouper des éléments, les navigateurs récents proposent Object.groupBy(), plus clair qu’un reduce() manuel.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.