I have an array:
var data = [{
"name": "Main Hobbies",
"checked": false,
"children": [{
"name": "Dance",
"checked": false,
"children": [{
"name": "Salsa",
"checked": true
}, {
"name": "Solo",
"checked": false
}]
}, {
"name": "Sports",
"checked": false,
"children": [{
"name": "Cricket",
"checked": true
}]
}]
}, {
"name": "Game",
"checked": false,
"children": [{
"name": "PUBG",
"checked": false
}, {
"name": "Cricket",
"checked": false
}, {
"name": "Football",
"checked": true
}]
}]
function removeFalseElem(arr) {
arr.forEach(element => {
if (Array.isArray(element.children) && element.children.length > 0) {
element.children = element.children.filter(e => {
return e.checked === true
});
element.children.map(e => {
delete e['id'], delete e['checked']
})
} else {
removeFalseElem(element.children);
}
delete element['id'], delete element['checked'];
});
}
removeFalseElem(data);
console.log(data);
How do I map name to key and children to array contains wherever checked is true. Main hobies should contain Salsa since it is checked. I just want to inverse the approach of this question
output should be like
{
"Main Hobbies": { Dance: ["Salsa"], Sports: ["Cricket"] },
Game: ["Football"]
}
have to keep only checked:true values