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 flat() permet de créer un nouveau tableau contenant les éléments de des sous-tableaux du tableau passé en argument, qui sont concaténés récursivement pour atteindre une profondeur donnée.

Syntaxe

var nouveauTableau = monTableau.flat(profondeur)

Paramètres

profondeur Facultatif
Le niveau de profondeur en termes d'imbrication de tableau. Autrement dit, jusqu'à quel niveau d'imbrication un tableau imbriqué doit il être aplati. La valeur par défaut est 1.

Valeur de retour

Un nouveau tableau qui contient la concaténation des éléments des sous-tableaux du tableau passé en argument.

Exemples

Aplatir des tableaux imbriqués

var arr1 = [1, 2, [3, 4]];
arr1.flat(); 
// [1, 2, 3, 4]

var arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]

var arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]

Aplatir et combler les trous

La méthode flat() permet également de retirer les « trous » d'un tableau :

var arr4 = [1, 2, , 4, 5];
arr4.flat();
// [1, 2, 4, 5]

Equivalent

reduce et concat

var arr1 = [1, 2, [3, 4]];
arr1.flat();
// pour un tableau avec un seul niveau de profondeur, c'est équivalent à
arr1.reduce((acc, val) => acc.concat(val), []);
// [1, 2, 3, 4]


// Pour gérer plusieurs niveaux, on pourra utiliser
// une méthode récursive avec reduce et concat

var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];
function flatDeep(arr1) {
   return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(flatDeep(val)) : acc.concat(val), []);
};
flatDeep(arr1);
// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]

// Version non récursive utilisant une pile
function flatNonRec(input) {
  const stack = [...input];
  const res = [];
  while (stack.length) {
    // On sort une valeur de la pile
    const next = stack.pop();
    if (Array.isArray(next)) {
      // On place les éléments qui sont des tableaux dans
      // la pile sans modifier l'entrée
      stack.push(...next);
    } else {
      res.push(next);
    }
  }
  // On inverse le résultat pour revenir 
  // à l 'ordre de l'entrée
  return res.reverse();
}
flatNonRec(arr1);

Spécifications

Spécification État Commentaires
Brouillon de proposition pour Array.prototype.flat Brouillon de niveau 3 (candidat)  

Compatibilité des navigateurs

FonctionnalitéChromeEdgeFirefoxInternet ExplorerOperaSafari
Support simple69 Non62 Non56 Non
FonctionnalitéAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Support simple6969 Non6256 Non Non

Voir aussi

Étiquettes et contributeurs liés au document

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