--- title: Array.prototype.flatMap() slug: Web/JavaScript/Reference/Global_Objects/Array/flatMap tags: - Array - JavaScript - Méthode - Prototype - Reference translation_of: Web/JavaScript/Reference/Global_Objects/Array/flatMap original_slug: Web/JavaScript/Reference/Objets_globaux/Array/flatMap ---
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 {{jsxref("Array.prototype.map()")}} suivi de {{jsxref("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 !
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
// return element for new_array
}[, thisArg])
callbackcurrentValueindex{{optional_inline}}array{{optional_inline}}flatMap a été appelée.thisArg{{optional_inline}}this lors de l'exécution de callback.Un nouveau tableau composé d'éléments résultants de la fonction de rappel (callback) et aplati d'un niveau de profondeur.
Pour la fonction de rappel, voir {{jsxref("Array.prototype.map()")}}. La méthode flatMap() est identique à un appel de {{jsxref("Array.prototype.map()")}} suivi d'un appel de {{jsxref("Array.prototype.flat()")}} avec la profondeur 1.
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.
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écification | État | Commentaires |
|---|---|---|
| ECMAScript 2019 | Finalisé | Proposition initiale |
{{Compat("javascript.builtins.Array.flatMap")}}