I have this array:
[
{
id: 1,
name: 'test 1',
children: []
},
{
id: 2,
name: 'test 2',
children: [
{
id: 4,
name: 'test 4'
}
]
},
{
id: 3,
name: 'test 3',
children: []
}
]
How can I filter by the id
property in both this array and the nested children
arrays?
For example, searching for id = 3
, should return the test 3
object, and searching for id = 4
should return the test 4
object.
Using lodash, you can do something like this:
_(data)
.thru(function(coll) {
return _.union(coll, _.map(coll, 'children') || []);
})
.flatten()
.find({ id: 4 });
Here, thru() is used to initialize the wrapped value. It's returning the union of the original array, and the nested children. This array structure is then flattened using flatten(), so you can find() the item.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With