--- title: Array.prototype.flatMap() slug: Web/JavaScript/Reference/Global_Objects/Array/flatMap translation_of: Web/JavaScript/Reference/Global_Objects/Array/flatMap ---
O método flatMap()
primeiro mapeia cada elemento usando uma função de mapeamento e, em seguida, nivela o resultado em um novo array. É idêntico a um map
seguido por um flat
de profundidade 1, mas flatMap
é bastante útil e mescla 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
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) { // retorna o elemento para new_array }[, thisArg])
callback
currentValue
index
{{optional_inline}}array
{{optional_inline}}O map
da array que foi chamado.
thisArg
{{optional_inline}}this
quando callback
estiver sendo executado.Uma nova array com cada elemento sendo o resultado da função callback e achatado ao valor de 1.
Veja {{jsxref("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.
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.
reduce
e concat
var arr1 = arr1.flatMap(x => [x * 2] // é equivalente a arr1.reduce((acc, x) => acc.concat([x * 2]
Specification | Status | Comment |
---|---|---|
Array.prototype.flatMap proposal |
Rascunho |
{{Compat("javascript.builtins.Array.flatMap")}}