Array.prototype.flat()

Esta é uma tecnologia experimental
Verifique a tabela de compatibilidade entre Navegadores cuidadosamente antes de usar essa funcionalidade em produção.

O método flat() cria um novo array com todos elementos sub-arrays concatenados nele de forma recursiva até a profundidade especificada.

Sintaxe

var novoArray = arr.flat(depth)

Parâmetros

depth Optional
O nível de profundidade especifíca o quanto um array aninhando deve ser achatado. O Default é 1.

Retorno

Um novo array com os elementos sub-array concatenados nele.

Examplos

Achatando arrays aninhados

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]

const arr4 = [1, 2, [3, 4, [5, 6, [7, 8]]]];
arr3.flat(Infinity); 
// [1, 2, 3, 4, 5, 6, 7, 8]

Achatando e buracos em array

o método flat remove espaços vazios do array:

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

Alternativa

reduceconcat

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

//achatar array de nível único
arr1.reduce((acc, val) => acc.concat(val), []);
// [1, 2, 3, 4]

//para achatamentos mais profundos, use recursividade com reduce e concat
var arr1 = [1,2,3,[1,2,3,4, [2,3,4]]];

(function flattenDeep(arr1){
   return arr1.reduce((acc, val) => Array.isArray(val) ? acc.concat(flattenDeep(val)) : acc.concat(val), []);
})(arr1);

// [1, 2, 3, 1, 2, 3, 4, 2, 3, 4]


Especificações

Especificação Status Comentários
Array.prototype.flat proposal Draft

Compatibilidade em Navegadores

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidFirefox for AndroidOpera for AndroidSafari on iOSSamsung InternetNode.js
flatChrome Full support 69Edge No support NoFirefox Full support 62IE No support NoOpera Full support 56Safari Full support 12WebView Android Full support 69Chrome Android Full support 69Firefox Android Full support 62Opera Android Full support 48Safari iOS Full support 12Samsung Internet Android No support Nonodejs Full support 11.0.0

Legend

Full support  
Full support
No support  
No support

Veja Também