Array.prototype.flatMap()
Baseline Widely 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éthode flatMap()
permet d'appliquer une fonction à chaque élément du tableau puis d'aplatir le résultat en un tableau. Cela correspond à l'enchaînement de Array.prototype.map()
suivi de Array.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
Facultatif-
L'indice de l'élément du tableau qui est traitée.
array
Facultatif-
Le tableau sur lequel
flatMap
a été appelée.
thisArg
Facultatif-
La 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, voir Array.prototype.map()
. La méthode flatMap()
est identique à un appel de Array.prototype.map()
suivi d'un appel de Array.prototype.flat()
avec la profondeur 1.
Exemples
map()
et flatMap()
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 aplati
arr1.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 avec flatMap
est différente de la longueur de la liste originale.
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
Équivalent
reduce()
et concat()
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 Language Specification # sec-array.prototype.flatmap |
Compatibilité des navigateurs
BCD tables only load in the browser