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")}}
A fonte deste exemplo interativo é armazenada em um repositório GitHub. Se você quiser contribuir com o projeto de exemplos interativos, clone https://github.com/mdn/interactive-examples e envie-nos um PR
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
mapda array que foi chamado. thisArgOptional- Valor para ser usado como
thisquandocallbackestiver 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 = x => [x * 2] // [[2], [4], [6], [8]] arr1.flatMap(x => [x * 2] // 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(" ")
Perceba, o comprimento da lista de saída pode ser diferente do comprimento da lista de entrada.
Alternativa
reduce e concat
var arr1 = arr1.flatMap(x => [x * 2] // é equivalente a arr1.reduce((acc, x) => acc.concat([x * 2]
Specificações
| Specification | Status | Comment |
|---|---|---|
Array.prototype.flatMap proposal |
Rascunho |
Compatibilidade de browser
| Desktop | Mobile | Server | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Basic support | Chrome Full support 69 | Edge No support No | Firefox Full support 62 | IE No support No | Opera Full support 56 | Safari Full support 12 | WebView Android Full support 69 | Chrome Android Full support 69 | Edge Mobile No support No | Firefox Android Full support 62 | Opera Android Full support 56 | Safari iOS Full support 12 | Samsung Internet Android No support No | nodejs 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.