Array.prototype.flatMap()
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
La méthodeflatMap()
permet d'appliquer une fonction à chaque élément du tableau puis d'aplatir le résultat en un tableau. Cela correspond à l'enchaînement deArray.prototype.map()
suivi deArray.prototype.flat()
de profondeur 1.flatMap
est plus efficace que la combinaison de ces deux opérations, souvent réalisées conjointement.
Syntaxe
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) { // return element for new_array}[, thisArg])
Paramètres
callback
La fonction qui produit un élément du nouveau tableau et qui prend trois arguments :
currentValue
La valeur du tableau qui est traitée.
index
FacultatifL'indice de l'élément du tableau qui est traitée.
array
FacultatifLe tableau sur lequel
flatMap
a été appelée.
thisArg
FacultatifLa valeur à utiliser comme contexte
this
lors de l'exécution decallback
.
Valeur de retour
Un nouveau tableau composé d'éléments résultants de la fonction de rappel (callback) et aplati d'un niveau de profondeur.
Description
Pour la fonction de rappel, voirArray.prototype.map()
. La méthodeflatMap()
est identique à un appel deArray.prototype.map()
suivi d'un appel deArray.prototype.flat()
avec la profondeur 1.
Exemples
map()
etflatMap()
var arr1 = [1, 2, 3, 4];arr1.map((x) => [x * 2]);// [[2], [4], [6], [8]]arr1.flatMap((x) => [x * 2]);// [2, 4, 6, 8]// seul un niveau est aplatiarr1.flatMap((x) => [[x * 2]]);// [[2], [4], [6], [8]]
On peut utiliser un autre exemple où on génère une liste de mots à partir d'une liste de phrases :
let tableau1 = ["Coucou comment", "", "ça va ?"];tableau1.map((x) => x.split(" "));// [["Coucou", "comment"], [""], ["ça", "va", "?"]]tableau1.flatMap((x) => x.split(" "));// ["Coucou", "comment", "", "ça", "va", "?"]
On notera que la longueur de la liste obtenue avecflatMap
est différente de la longueur de la liste originale.
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
Équivalent
reduce()
etconcat()
var arr = [1, 2, 3, 4];arr.flatMap((x) => [x, x * 2]);// est équivalent àarr.reduce((acc, x) => acc.concat([x, x * 2]), []);// [1, 2, 2, 4, 3, 6, 4, 8]
Spécifications
Specification |
---|
ECMAScript® 2026 Language Specification # sec-array.prototype.flatmap |