I have data like this one below
let data = [
{
name: 'basic',
to: 'aaa',
subMenus: [
{
name: 'general conc',
to: 'geneal',
},
{
name: 'example view',
to: 'example',
},
{
name: 'fancy',
to: 'bbb',
innerSubMenus: [
{
name: 'adding',
to: 'add',
},
{
name: 'getting',
to: 'get',
},
]
}
]
}
]
I need to filter data based on name (in main, subMenus, and innerSubMenus) Here is the piece of code
function deepFilter(inputText){
data.filter(items => items.name.toLowerCase().includes(inputText.toLowerCase()))
}
As you can see, the function filters the first prop (name --> basic in this case when inputText = 'basic', doesn't work when inputText = 'general conc') but I want to be able to filter names in subMenus and innerSubMenus as well. Please, guide me on how to do it. Thanks
expected outputs:
deepFilter('basic') -> true // only this part is covered by my implementation
deepFilter('general conc') -> true
deepFilter('adding') -> true
deepFilter('ffff') -> false //since there is not name with value of 'ffff' in data
data.filter(items => items.name.toLowerCase().includes(inputText.toLowerCase()) && <other conditions>)?data.filter(items => preserveItem(item))and then write a separatefunction preserveItem(item)that can return true or false depending on all the various conditions you need met. Now you've reduced the problem of "writing filtering code" to only writing out individual conditions that need to be met, and returning the "or" of their values. Fat arrow functions are super useful, but not if you need moderately complex code for which preserving declare-time-thisis irrelevant, like here.