Esta tradução está incompleta. Por favor, ajude a traduzir este artigo.

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

O método flatMap() primeiro mapeia cada elemento usando uma função de mapeamento e, em seguida, nivela o resultado em uma nova array. É idêntico a um map seguido por um flat de profundidade 1, mas flatMap é bastante útil e mesclar ambos em um método um pouco mais eficiente.{{EmbedInteractiveExample("pages/js/array-flatmap.html")}}

Syntax

var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
    // retorna o elemento para new_array
}[, thisArg])

Parâmetros

callback
Função que produz um elemento de uma nova Array, pegando três argumentos:
 
currentValue
O valor atual sendo processo na array.
indexOptional
O index do valor atual sendo processo na array.
arrayOptional

O map da array que foi chamado.

thisArgOptional
Valor para ser usado como this quando callback estiver sendo executado.

Valor de retorno

Uma nova array com cada elemento sendo o resultado da função callback e achatado ao valor de 1.

Descrição

Veja Array.prototype.map() para uma detalhada descrição da função callback. O método flatMap é idêntico ao map seguido por um chamado a flatten de profundidade 1.

Exemplos

map e flatMap

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

arr1.map(x => [x * 2]); 
// [[2], [4], [6], [8]]

arr1.flatMap(x => [x * 2]);
// [2, 4, 6, 8]

//  Só o primeiro nível
arr1.flatMap(x => [[x * 2]]);
// [[2], [4], [6], [8]]

Enquanto que acima poderíamos alcançar apenas com a utilização de map, já aqui temos um exemplo onde flatMap é mais apropriado.

Vamos gerar uma lista de palavras a partir de uma lista de sentenças.

let arr1 = ["it's Sunny in", "", "California"];
 
arr1.map(x=>x.split(" "));
// [["it's","Sunny","in"],[""],["California"]]
 
arr1.flatMap(x => x.split(" "));
// ["it's","Sunny","in", "", "California"]

Perceba, o comprimento da lista de saída pode ser diferente do comprimento da lista de entrada.

//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

Alternativa

reduce e concat

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

arr1.flatMap(x => [x * 2]);
// é equivalente a
arr1.reduce((acc, x) => acc.concat([x * 2]), []);
// [2, 4, 6, 8]
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

Specificações

Specification Status Comment
Array.prototype.flatMap proposal Rascunho  

Compatibilidade de browser

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support69 No62 No56 No
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support6969 No6256 No No

Veja também

Etiquetas do documento e colaboradores

Colaboradores desta página: rbuzatto, leonardomarciano, proxy-chan
Última atualização por: rbuzatto,