Отфильтровать массив в массиве и получить только отфильтрованные элементы - PullRequest
2 голосов
/ 28 мая 2020

У меня есть следующий массив с именем filters, и я пытаюсь отфильтровать его по выбранным элементам.
В конце я хочу иметь все фильтры, в которых находится выбранный элемент, но только с выбранными элементами

let filters = [
  {
    id: 0,
    name: 'property',
    items: [
      {
        id: 0,
        name: 'x',
        isSelected: false
      },
      {
        id: 1,
        name: 'y',
        isSelected: true
      }
    ]
  },
  {
    id: 1,
    name: 'property2',
    items: [
      {
        id: 0,
        name: 'x',
        isSelected: true
      },
      {
        id: 1,
        name: 'y',
        isSelected: false
      }
    ]
  }
]

Я хочу получить в конце следующий массив:

let filteredFilters = [
  {
    id: 0,
    name: 'property',
    items: [
      {
        id: 1,
        name: 'y',
        isSelected: true
      }
    ]
  },
  {
    id: 1,
    name: 'property2',
    items: [
      {
        id: 0,
        name: 'x',
        isSelected: true
      }
    ]
  }
]

Я пробовал следующий код, но он не работает.

let filteredFilters = filters.filter(filter => {
    return filter.items.filter(item => {
       return item.isSelected === true;
  })
})

1 Ответ

2 голосов
/ 28 мая 2020

Вам нужно map + filter, поскольку вы имеете дело с вложенным массивом:

let filters = [
  {
    id: 0,
    name: 'property',
    items: [
      {
        id: 0,
        name: 'x',
        isSelected: false
      },
      {
        id: 1,
        name: 'y',
        isSelected: true
      }
    ]
  },
  {
    id: 1,
    name: 'property2',
    items: [
      {
        id: 0,
        name: 'x',
        isSelected: true
      },
      {
        id: 1,
        name: 'y',
        isSelected: false
      }
    ]
  }
]


let filteredFilters = 
    filters.map(
        ({items, ...rest}) => ({...rest, items: items.filter(item => item.isSelected)})
    )
    .filter(x => x.items.length > 0);

console.log(filteredFilters);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...