DEV Community

Bogdan Varlamov
Bogdan Varlamov

Posted on

JavaScript Array Methods: Understanding `flatMap`

Image description

The flatMap method is a powerful tool in JavaScript that combines the functionality of both map and flat, allowing for the transformation and flattening of array elements in a single step. Let's delve into how this method works and explore its practical applications.

Simple Example

Consider the following example that demonstrates the basic use of flatMap:

const arr = [
  [1, 2],
  [3, 4],
  [5, 6],
].flatMap((n) => n)
console.log(arr) // [1, 2, 3, 4, 5, 6]
Enter fullscreen mode Exit fullscreen mode

This method is particularly useful when we need both the mapping and flattening of an array, but why not just use map followed by flat? The answer lies in efficiency; flatMap is slightly more efficient than calling map and flat separately.

Moreover, flatMap can serve as a viable alternative to the reduce method in certain scenarios.

Practical Application

Let's examine a more complex example involving an array of recent user orders, where each order includes details such as the date, total price, and a list of products:

// Recent orders
const recentOrders = [
  {
    date: '06.04.2024',
    totalPrice: 18,
    products: [
      { name: 'milk', amount: 1, price: 6 },
      { name: 'fruits', amount: 4, price: 12 },
    ],
  },
  {
    date: '05.04.2024',
    totalPrice: 30,
    products: [
      { name: 'eggs', amount: 4, price: 20 },
      { name: 'apples', amount: 2, price: 10 },
    ],
  },
]
Enter fullscreen mode Exit fullscreen mode

Our goal is to extract and display only the products from these recent orders. While this can be achieved using the reduce method, flatMap offers a more concise solution:

Using reduce:

const recentProducts = recentOrders.reduce((acc, item) => {
  acc.push(...item.products)
  return acc
}, [])
console.log(recentProducts)
// Output:
// [
//   {name: 'milk', amount: 1, price: 6},
//   {name: 'fruits', amount: 4, price: 12},
//   {name: 'eggs', amount: 4, price: 20},
//   {name: 'apples', amount: 2, price: 10},
// ]
Enter fullscreen mode Exit fullscreen mode

Using flatMap:

const recentProducts = recentOrders.flatMap((item) => item.products)
console.log(recentProducts)
// Output:
// [
//   {name: 'milk', amount: 1, price: 6},
//   {name: 'fruits', amount: 4, price: 12},
//   {name: 'eggs', amount: 4, price: 20},
//   {name: 'apples', amount: 2, price: 10},
// ]
Enter fullscreen mode Exit fullscreen mode

The flatMap approach is not only simpler but also enhances code readability.

In conclusion, for tasks requiring the straightforward combination of mapping and flattening, flatMap should be your go-to choice. For more complex transformations, consider sticking with the reduce method.

Thanks for hanging out! Hit subscribe for more! 👋

Top comments (0)