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

Update compatibility data on GitHub
DesktopMobileServer
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewChrome for AndroidEdge MobileFirefox for AndroidOpera for AndroidiOS SafariSamsung InternetNode.js
Basic support
Experimental
Chrome 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 69Edge Mobile No support NoFirefox Android Full support 62Opera Android Full support 56Safari iOS Full support 12Samsung Internet Android No support Nonodejs No support No

Legend

Full support  
Full support
No support  
No support
Experimental. Expect behavior to change in the future.
Experimental. Expect behavior to change in the future.

Veja também

Etiquetas do documento e colaboradores

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