Array.prototype.flatMap()
BaselineWidely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
El métodoflatMap()
primero mapea cada elemento usando una función de mapeo, luego aplana el resultado en una nueva matriz. Es idéntico a unmap seguido de unflattende profundidad 1, peroflatMap
es a menudo útil y la fusión de ambos en un método es ligeramente más eficiente.
Pruébalo
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]
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
OpcionalEl índice del elemento actual que se procesa en la matriz.
array
OpcionalLa matriz
map
fue llamada.
thisArg
OpcionalValor para usar como
this
al ejecutarcallback
.
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
VerArray.prototype.map()
para una descripción detallada de la función de devolución de llamada. El métodoflatMap
es idéntico amap
seguido de una llamada aflatten
de profundidad 1.
Ejemplos
map
yflatMap
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 aplanadoarr1.flatMap((x) => [[x * 2]]);// [[2], [4], [6], [8]]
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
Alternativa
reduce
yconcat
var arr1 = [1, 2, 3, 4];arr1.flatMap((x) => [x * 2]);// es equivalente aarr1.reduce((acc, x) => acc.concat([x * 2]), []);// [2, 4, 6, 8]
//=> [1, 2, 3, 4, 5, 6, 7, 8, 9]
Polyfill
Este polyfill necesitaArray.prototype.flat polyfill
if (!Array.prototype.flatMap) { Array.prototype.flatMap = function () { return Array.prototype.map.apply(this, arguments).flat(1); };}
Especificaciones
Specification |
---|
ECMAScript® 2026 Language Specification # sec-array.prototype.flatmap |