const arr = [
{
category: 'Foo',
items: [
{
name: 'Oops',
keywords: [ 'bar', 'eggs', 'spam' ]
},
{
name: 'I did it again',
keywords: [ 'bar', 'britney', 'spears' ]
},
]
},
// ... еще объекты
]
Простую фильтрацию я уже сделал:
let filteredEmojies = arr.filter(category => {
return category.items.some(item => {
return item.keywords.some(keyword => keyword.includes(filter))
})
})
Теперь нужно её дополнить таким образом, чтобы в оставшемся объекте массив items так же был отфильтрован.
То есть, если я фильтрую по строке 'eg', то на выходе у меня останется
[
{
category: 'Foo',
items: [
{
name: 'Oops',
keywords: [ 'bar', 'eggs', 'spam' ]
}
]
}
]
UPD
Дополнил вот так, но присваивание (category.items = ...) меняет оригинальный объект. Как же быть
let filtered = arr.filter(category => {
category.items = category.items.filter(item => {
return item.keywords.some(keyword => keyword.includes(filter))
})
return category.items.length
})