I have the below nested data array. I would like to filter on the second level of children leaving only the children that have a name of either "Assistant" or "Advisor" while keeping the rest of the underlying data structure the same.
data = [{
"name": "root",
"median": 60000.0,
"children": [{
"name": "Defence",
"median": 60000.0,
"children": [{
"name": "Assistant",
"median": 30000.0,
},
{
"name": "Advisor",
"median": 50000.0,
},
{
"name": "Secretary",
"median": 60000.0,
},
{
"name": "Administrator",
"median": 60000.0,
},
{
"name": "Assistant",
"median": 20000.0,
},
]
},
{
"name": "Healthcare",
"median": 60000,
"children": [{
"name": "Manager",
"median": 80000,
},
{
"name": "Advisor",
"median": 60000,
},
{
"name": "Legal",
"median": 20000,
},
{
"name": "Cashier",
"median": 30000,
},
]
}
]
}]
The desired outcome leaves the upper level children the same while returning the second level children that match "Assistant" and "Advisor".
data = [{
"name": "root",
"median": 60000.0,
"children": [{
"name": "Defence",
"median": 60000.0,
"children": [{
"name": "Assistant",
"median": 30000.0,
},
{
"name": "Advisor",
"median": 50000.0,
},
{
"name": "Assistant",
"median": 20000.0,
},
]
},
{
"name": "Healthcare",
"median": 60000,
"children": [{
"name": "Advisor",
"median": 60000,
},
]
}
]
}]
I have tried to use a combination of map() and filter() but it only returns the matching second level children.
var fmatch = ["Assistant", "Advisor"]
console.log(data.map(c=> c.children.map(c => c.children.filter(c => fmatch.includes(c.name)))))
data = data = [{
"name": "root",
"median": 60000.0,
"children": [{
"name": "Defence",
"median": 60000.0,
"children": [{
"name": "Assistant",
"median": 30000.0,
},
{
"name": "Advisor",
"median": 50000.0,
},
{
"name": "Secretary",
"median": 60000.0,
},
{
"name": "Administrator",
"median": 60000.0,
},
{
"name": "Assistant",
"median": 20000.0,
},
]
},
{
"name": "Healthcare",
"median": 60000,
"children": [{
"name": "Manager",
"median": 80000,
},
{
"name": "Advisor",
"median": 60000,
},
{
"name": "Legal",
"median": 20000,
},
{
"name": "Cashier",
"median": 30000,
},
]
}
]
}]
var fmatch = ["Assistant", "Advisor"]
console.log(data.map(c=> c.children.map(c => c.children.filter(c => fmatch.includes(c.name)))))