Esta página foi traduzida do inglês pela comunidade.Saiba mais e junte-se à comunidade MDN Web Docs.
Array.prototype.flatMap()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since janeiro de 2020.
O métodoflatMap() primeiro mapeia cada elemento usando uma função de mapeamento e, em seguida, nivela o resultado em um novo array. É idêntico a ummap seguido por umflat de profundidade 1, masflatMap é bastante útil e mescla ambos em um método um pouco mais eficiente.
In this article
Experimente
const arr1 = [1, 2, 1];const result = arr1.flatMap((num) => (num === 2 ? [2, 2] : 1));console.log(result);// Expected output: Array [1, 2, 2, 1]Sintaxe
var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) { // retorna o elemento para new_array}[, thisArg])Parâmetros
callbackFunção que produz um elemento de uma nova Array, pegando três argumentos:
currentValueO valor atual sendo processo na array.
indexOptionalO index do valor atual sendo processo na array.
arrayOptionalO
mapda array que foi chamado.
thisArgOptionalValor 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
VejaArray.prototype.map() para uma detalhada descrição da função callback. O métodoflatMap é idêntico aomap seguido por um chamado aflatten de profundidade 1.
Exemplos
>map eflatMap
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ívelarr1.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 ondeflatMap é 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.
Alternativa
>reduce econcat
var arr1 = [1, 2, 3, 4];arr1.flatMap((x) => [x * 2]);// é equivalente aarr1.reduce((acc, x) => acc.concat([x * 2]), []);// [ 2, 4, 6, 8 ]Especificações
| Specification | Status | Comment |
|---|---|---|
Array.prototype.flatMap proposal | Rascunho |