I have lodash 4.17 available
I have the following API response structure:
{
"things": [
{
"id": 14500,
"name": "Q1 Out Ind",
"thing_type_id": 6,
"owner_id": 1680,
"owner": {
"id": 1680,
"model_id": 602
},
"thing_type": {
"id": 6,
"name": "The Type of Thing"
},
"related_things": [
{
"id": 9749,
"name": "unnamed thing",
"thing_id": 14500,
"more_things": [
{
"id": 16166,
"name": "Num Thing Sum",
"datasource_object_id": 9408,
"thing_id": 9749,
"external_datasource": {
"id": 9408,
"parent_id": 2810,
"target_id": 15028
}
}
]
}
]
},
{
"id": 14503,
"name": "Q2 Out Ind",
"thing_type_id": 6,
"owner_id": 1681,
"owner": {
"id": 1681,
"model_id": 602
},
"thing_type": {
"id": 6,
"name": "The Type of Thing"
},
"related_things": [
{
"id": 9750,
"name": "unnamed thing2",
"thing_id": 14503,
"more_things": [
{
"id": 16167,
"name": "Num Thing Avg",
"datasource_object_id": 9409,
"thing_id": 9750,
"external_datasource": {
"id": 9409,
"parent_id": 2810,
"target_id": 15029
}
},
{
"id": 16168,
"name": "Num Thing Count",
"datasource_object_id": 9408,
"thing_id": 9750,
"external_datasource": {
"id": 9408,
"parent_id": 2810,
"target_id": 15028
}
}
]
}
]
}
]
}
And I am trying to get a list of objects matching specific target_id
at the very end of the nesting.
So far, the following works only if there is one result in the array:
_.filter(things.things,
function (obj) {
return obj.related_things[0].more_things[0].external_datasource.target_id == 15028;
}
)
However, as you see in this example, in this case it has two "things" at the end of which, there is a match as there is array for more_things
and related_things
– how do I adjust my lodash filter to search across any depth? I need a list of matching objects, to display various attributes in the UI related to the matched targets.
2
Answers
you can have nested
_some
functions inside thefilter
. By the way this is also possible with native arrayfilter
andsome
without lodash
You can use
flatMap
andsome
withfilter