Getting properties from objects that match a condition

Need to get an attribute of all objects in an array that match a condition? Chain Array.prototype.filter() and Array.prototype.map() to first filter the list to all the elements you want and then get the values you’re looking for.

// this array contains objects that have a `name` and `type`
const food = [
  {
    name: 'Apple',
    type: 'fruit'
  }, {
    name: 'Banana',
    type: 'fruit'
  }, {
    name: 'Cucumber',
    type: 'vegetable'
  }
]

// we can first get all objects that have their `type` set to 'fruit'
const fruit = food.filter(element => element.type === 'fruit')
// ⇒ [
//     {
//       name: 'Apple',
//       type: 'fruit'
//     }, {
//       name: 'Banana',
//       type: 'fruit'
//     }
//   ]

// we can then use `.map()` to extract their names
const fruitNames = fruit.map(element => element.name)
// ⇒ ['Apple', 'Banana']


// we can do both steps at once by chaining `.filter()` and `.map()`
const fruitNames = food
  .filter(element => element.type === 'fruit')  // get all fruit
  .map(element => element.name)                 // extract their names
// ⇒ ['Apple', 'Banana']