How to filter out items in array of objects based on item in property array in JavaScript

What is the best way to return items in an array of object if they contain a certain property in a property which is an array?

I have the following array of objects:

const menus = [
  {
    id: 1,
    title: 'English',
    locations: ['MENU', 'MENU_EN']
  },
  {
    id: 2,
    title: 'Spanish',
    locations: ['MENU', 'MENU_SP']
  },
  {
    id: 3,
    title: 'German',
    locations: ['MENU', 'MENU_DE']
  },  
  {
    id: 4,
    title: 'German and english',
    locations: ['MENU', 'MENU_EN', 'MENU_DE']
  },
]

As an example, I am looking for a way to return any items which have ‘MENU_EN’ in the locations property. So I need a function which will return the following:

const filteredMenus = [
  {
    id: 1,
    title: 'English',
    locations: ['MENU', 'MENU_EN']
  },  
  {
    id: 4,
    title: 'German and english',
    locations: ['MENU', 'MENU_EN', 'MENU_DE']
  },
]

>Solution :

You can filter menus array using Array.prototype.filter() by checking if locations property includes the desired MENU_EN with Array.prototype.includes():

Code:

const menus = [{id: 1,title: 'English',locations: ['MENU', 'MENU_EN']},{id: 2,title: 'Spanish',locations: ['MENU', 'MENU_SP']},{id: 3,title: 'German',locations: ['MENU', 'MENU_DE']},{id: 4,title: 'German and english',locations: ['MENU', 'MENU_EN', 'MENU_DE']},]

const filteredMenus = menus.filter(({ locations }) => locations.includes('MENU_EN'))

console.log(filteredMenus)

Leave a Reply