Array.prototype.flat
El arreglo en este ejemplo tiene varios niveles de profundidad: contiene un arreglo que a su vez contiene otro arreglo.
const array = [1, [2, [3]]];
Array#flat
devuelve una versión aplanda de un arreglo dado.
array.flat();
array.flat(1);
La profundidad predeterminada es 1
, pero puedes pasar cualquier número para aplanar recursivamente hasta esa profundidad. Para seguir aplanando recursivamente hasta que el resultado no contenga más arreglos anidados, pasamos Infinity
.
¿Por qué este método se llama Array.prototype.flat
y no Array.prototype.flatten
? ¡Lee nuestro artículo #SmooshGate para descubrirlo!
Array.prototype.flatMap
Aquí hay otro ejemplo. Tenemos una función duplicate
que toma un valor y devuelve un arreglo que contiene ese valor dos veces. Si aplicamos duplicate
a cada valor en un arreglo, terminamos con un arreglo anidado.
const duplicate = (x) => [x, x];
[2, 3, 4].map(duplicate);
Entonces puedes llamar a flat
sobre el resultado para aplanar el arreglo:
[2, 3, 4].map(duplicate).flat();
Dado que este patrón es tan común en la programación funcional, ahora hay un método dedicado llamado flatMap
para ello.
[2, 3, 4].flatMap(duplicate);
flatMap
es un poco más eficiente en comparación con realizar un map
seguido de un flat
por separado.
¿Interesado en casos de uso de flatMap
? Consulta la explicación de Axel Rauschmayer.
Compatibilidad con Array#{flat,flatMap}