I have an array of objects and within those objects, I have another array. I want to filter the results by the checked value in the drilled-down array.
I have tried map, forEach, splice and I think I am missing something.
[
{
"id": 1,
"parent": "Parent 1",
"parents": [
{
"label": "New Item",
"editable": true,
"children": [],
"checked": true
},
{
"label": "New Item",
"editable": true,
"children": [],
"checked": false
},
{
"label": "New Item",
"editable": true,
"children": [],
"checked": true
},
{
"label": "New Item",
"editable": true,
"children": [],
"checked": false
}
]
},
{
"id": 1,
"parent": "Parent 2",
"parents": [
{
"label": "New Item",
"editable": true,
"children": [],
"checked": true
},
{
"label": "New Item",
"editable": true,
"children": [],
"checked": false
},
{
"label": "New Item",
"editable": true,
"children": [],
"checked": true
},
{
"label": "New Item",
"editable": true,
"children": [],
"checked": false
}
]
}
]
The results I am trying to get:
[
{
"id": 1,
"parent": "Parent 1",
"parents": [
{
"label": "New Item",
"editable": true,
"children": [],
"checked": true
},
{
"label": "New Item",
"editable": true,
"children": [],
"checked": true
}
]
},
{
"id": 1,
"parent": "Parent 2",
"parents": [
{
"label": "New Item",
"editable": true,
"children": [],
"checked": true
},
{
"label": "New Item",
"editable": true,
"children": [],
"checked": true
}
]
}
]
A combination of .map()
and .filter()
should do the job:
const result = array.map((el) => ({
...el,
parents: el.parents.filter((c) => c.checked)
}));
console.log(result);