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.
{{EmbedInteractiveExample("pages/js/array-flatten.html")}}
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.
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 arr4 = [1, 2, , 4, 5];
arr4.flat();
// [1, 2, 4, 5]
Alternativa
reduce
e concat
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
BCD tables only load in the browser