Cette fonction est expérimentale
Puisque cette fonction est toujours en développement dans certains navigateurs, veuillez consulter le tableau de compatibilité pour les préfixes à utiliser selon les navigateurs.
Il convient de noter qu'une fonctionnalité expérimentale peut voir sa syntaxe ou son comportement modifié dans le futur en fonction des évolutions de la spécification.
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.
{{EmbedInteractiveExample("pages/js/array-flatmap.html")}}
Le code source de cet exemple interactif est disponible dans un dépôt GitHub. Si vous souhaitez contribuez à ces exemples, n'hésitez pas à cloner https://github.com/mdn/interactive-examples et à envoyer une pull request !
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.
indexFacultatif- L'indice de l'élément du tableau qui est traitée.
arrayFacultatif- Le tableau sur lequel
flatMapa été appelée.
thisArgFacultatif- La valeur à utiliser comme contexte
thislors 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 = x => [x * 2] // [[2], [4], [6], [8]] arr1.flatMap(x => [x * 2] // 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.
Equivalent
reduce et concat
var arr1 = [1, 2, 3, 4];
arr1.flatMap(x => [x * 2]);
// est équivalent à
arr1.reduce((acc, x) => acc.concat([x * 2]), []);
// [2, 4, 6, 8]
Spécifications
| Spécification | État | Commentaires |
|---|---|---|
Proposition pour Array.prototype.flatMap |
Brouillon de niveau 3 (candidat) |
Compatibilité des navigateurs
| Ordinateur | Mobile | Serveur | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Support simple | Chrome Support complet 69 | Edge Aucun support Non | Firefox Support complet 62 | IE Aucun support Non | Opera Support complet 56 | Safari Support complet 12 | WebView Android Support complet 69 | Chrome Android Support complet 69 | Edge Mobile Aucun support Non | Firefox Android Support complet 62 | Opera Android Support complet 56 | Safari iOS Support complet 12 | Samsung Internet Android Aucun support Non | nodejs Aucun support Non |
Légende
- Support complet
- Support complet
- Aucun support
- Aucun support
- Fonctionnalité expérimentale. Celle-ci peut être amenée à changer par la suite.
- Fonctionnalité expérimentale. Celle-ci peut être amenée à changer par la suite.