ComparaisonComparaisons

map() vs forEach()

map() construit un nouveau tableau à partir des résultats de la fonction ; forEach() se contente d’appeler la fonction pour chaque élément et renvoie toujours undefined.

Sur cette page

Comparaison point par point

#

Exemple

#
JavaScript
const prices = [10, 20, 30]

const doubled = prices.map((price) => price * 2)
const result = prices.forEach((price) => console.log(price))

console.log(doubled)
console.log(result)
Console
10
20
30
[20, 40, 60]
undefined

Définition et utilisation

#

Les deux méthodes parcourent les éléments du tableau et appellent pour chacun la même fonction avec les arguments (element, index, array). Ce qui les distingue, c’est ce qui arrive au résultat : map() rassemble les valeurs renvoyées par la fonction dans un nouveau tableau de même longueur, tandis que forEach() les ignore et renvoie toujours undefined.

Le choix est donc simple. Quand vous voulez transformer des données et utiliser ensuite le résultat (prix avec taxe, liste de noms, éléments d’une liste en React), utilisez map(). Quand vous voulez seulement exécuter un effet de bord pour chaque élément (l’afficher dans la console, l’enregistrer, modifier un élément de la page), utilisez forEach().

La performance n’est pas un critère ici, car en pratique les deux méthodes sont tout aussi rapides. Ce qui compte, c’est la lisibilité : un map() dont personne n’utilise le résultat laisse penser à une erreur, et un forEach() avec push() dans un tableau séparé n’est qu’une version plus longue de map().

Syntaxe

#
Syntaxe
const result = array.map((element, index, array) => newValue)
array.forEach((element, index, array) => { /* effet de bord */ })

Plus d’exemples

#
map() dans une chaîne de méthodes
JavaScript
const students = [
  { name: 'Léa', points: 120 },
  { name: 'Lucas', points: 95 },
  { name: 'Emma', points: 140 }
]

const summary = students
  .map((student) => `${student.name}: ${student.points}`)
  .join(', ')

console.log(summary)
Console
Léa: 120, Lucas: 95, Emma: 140
forEach() avec push() est une version plus longue de map()
JavaScript
const names = ['léa', 'lucas']

const upperWithForEach = []
names.forEach((name) => upperWithForEach.push(name.toUpperCase()))

const upperWithMap = names.map((name) => name.toUpperCase())

console.log(upperWithForEach)
console.log(upperWithMap)
Console
['LÉA', 'LUCAS']
['LÉA', 'LUCAS']

Le résultat est le même, mais la version avec map() est plus courte et ne nécessite pas de tableau vide au départ.

Quand il faut interrompre : for...of plutôt que forEach()
JavaScript
const scores = [40, 75, 90, 20]

for (const score of scores) {
  if (score > 80) {
    console.log('Premier résultat au-dessus de 80 :', score)
    break
  }
}
Console
Premier résultat au-dessus de 80 : 90

Bonnes pratiques

#
  • Si vous n’utilisez pas le tableau renvoyé par map(), remplacez-le par forEach() ou une boucle for...of.
  • N’utilisez pas forEach() avec await : la boucle n’attend pas les promesses. Utilisez for...of ou await Promise.all(array.map(...)).
  • Vous cherchez un seul élément ou vérifiez une condition ? find(), some() et every() terminent plus tôt que forEach().

Entrées associées

#

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