--- title: Array.prototype.flatMap() slug: Web/JavaScript/Referencia/Objetos_globales/Array/flatMap tags: - Array - JavaScript - Prototipo - Referencia - metodo translation_of: Web/JavaScript/Reference/Global_Objects/Array/flatMap ---
{{JSRef}} {{SeeCompatTable}}

El método flatMap() primero mapea cada elemento usando una función de mapeo, luego aplana el resultado en una nueva matriz. Es idéntico a un map seguido de un flatten de profundidad 1, pero flatMap es a menudo útil y la fusión de ambos en un método es ligeramente más eficiente.

Sintaxis

var new_array = arr.flatMap(function callback(currentValue[, index[, array]]) {
    // return element for new_array
}[, thisArg])

Parámetros

callback
Función que produce un elemento de la nueva matriz, tomando tres argumentos:
currentValue
El elemento actual que se procesa en la matriz.
index{{optional_inline}}
El índice del elemento actual que se procesa en la matriz.
array{{optional_inline}}
La matriz map fue llamada.
thisArg{{optional_inline}}
Valor para usar como this al ejecutar callback.

Valor de retorno

Una nueva matriz con cada elemento es el resultado de la función de devolución de llamada y se aplana a una profundidad de 1.

Descripción

Ver {{jsxref("Array.prototype.map()")}} para una descripción detallada de la función de devolución de llamada. El método flatMap es idéntico a map seguido de una llamada a flatten de profundidad 1.

Ejemplos

map y 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]

// solo un nivel es aplanado
arr1.flatMap(x => [[x * 2]]);
// [[2], [4], [6], [8]]
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]

Alternativa

reduce y concat

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

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

Polyfill

Este polyfill necesita Array.prototype.flat polyfill

if (!Array.prototype.flatMap) {
  Array.prototype.flatMap = function() {
    return Array.prototype.map.apply(this, arguments).flat(1);
  };
}

Especificaciones

Especificación Estado Comentario
Array.prototype.flatMap  Finalizado (4)

Compatibilidad con navegadores

{{Compat("javascript.builtins.Array.flatMap")}}

Ver también