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.

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 flatMap a été appelée.
thisArgFacultatif
La valeur à utiliser comme contexte this lors de l'exécution de callback.

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]

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

Update compatibility data on GitHub
OrdinateurMobileServeur
ChromeEdgeFirefoxInternet ExplorerOperaSafariWebview AndroidChrome pour AndroidEdge MobileFirefox pour AndroidOpera pour AndroidSafari pour iOSSamsung InternetNode.js
Support simple
Expérimentale
Chrome Support complet 69Edge Aucun support NonFirefox Support complet 62IE Aucun support NonOpera Support complet 56Safari Support complet 12WebView Android Support complet 69Chrome Android Support complet 69Edge Mobile Aucun support NonFirefox Android Support complet 62Opera Android Support complet 56Safari iOS Support complet 12Samsung Internet Android Aucun support Nonnodejs 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.

Voir aussi

Étiquettes et contributeurs liés au document

Contributeurs à cette page : SphinxKnight, Baptistou
Dernière mise à jour par : SphinxKnight,