Saturday, May 11, 2024
47
rated 0 times [  50] [ 3]  / answers: 1 / hits: 33309  / 9 Years ago, mon, june 8, 2015, 12:00:00

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.


More From » underscore.js

 Answers
6

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.


[#66284] Friday, June 5, 2015, 9 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
stefanicarolinat

Total Points: 145
Total Questions: 91
Total Answers: 93

Location: Cambodia
Member since Thu, Oct 7, 2021
3 Years ago
stefanicarolinat questions
Mon, Nov 15, 21, 00:00, 3 Years ago
Fri, Apr 16, 21, 00:00, 3 Years ago
Thu, Oct 15, 20, 00:00, 4 Years ago
Fri, Jul 17, 20, 00:00, 4 Years ago
;