Array.prototype.flat()

Experimental: Esta é uma tecnologia experimental (en-US)
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.

Experimente

Sintaxe

  flat()
  flat(depth)

Parâmetros

depth Optional

O nível de profundidade especifíca o quão profundo um array aninhando deve ser achatado. O padrão é 1.

Retorno

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

Exemplos

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]]]];
arr4.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 arr5 = [1, 2, , 4, 5];
arr5.flat();
// [1, 2, 4, 5]

Alternativa

reduce e concat

var arr = [1, 2, [3, 4]];

// Achatar array de nível único
arr.flat();
// É equivalente à
arr.reduce((acc, val) => acc.concat(val), []);
// [1, 2, 3, 4]

// Ou com sintaxe de decomposição
const flattened = (arr) => [].concat(...arr);

reduceconcat + isArray + recursividade

var arr = [1, 2, [3, 4, [5, 6]]];

// Para achatamentos mais profundos, use recursividade com reduce e concat
function flatDeep(arr, d = 1) {
   return d > 0 ? arr.reduce((acc, val) => acc.concat(Array.isArray(val) ? flatDeep(val, d - 1) : val), []) : arr.slice();
};

flatDeep(arr, Infinity);
// [1, 2, 3, 4, 5, 6]

Especificações

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

Compatibilidade com navegadores

BCD tables only load in the browser

Veja Também