--- 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])
callback
currentValue
index
{{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")}}