Objects

The JavaScript map() Function

Learn how to use the JavaScript array map() method to build a new array by running a function on every element, then chain it with filter() to refine results.

8 minute lesson

~~~

map() builds a new array with one output for every input. The original array length and order are preserved.

This example calls f for each element:

const b = a.map(f)

Use it when each input becomes a corresponding output:

const prices = [10, 20, 30]
const pricesWithTax = prices.map(price => price * 1.2)

The callback’s return value becomes the new element. Forgetting return in a block callback produces undefined values:

const doubled = prices.map(price => {
  return price * 2
})

Do not use map() only for side effects. If you are not using the returned array, forEach() or a loop communicates the intent better.

Chain operations when the intermediate meaning stays clear. This example selects words beginning with A and then transforms them:

const list = ['Apple', 'Orange', 'Apricot']
const labels = list
  .filter(item => item.startsWith('A'))
  .map(item => item.toUpperCase())

map() is shallow. If a callback mutates an object, that same object is changed in the source array. Return a new object when immutability matters:

const activeUsers = users.map(user => ({ ...user, active: true }))

Try it: map a list of cart lines into subtotals, then use reduce() to total them. Confirm the original lines were not mutated.

Lesson completed