I have an observable output like below. I want to convert this data to desired format(proivded below). I am partially successful forming key value pairs but couldn't figure out how to send only one field(that is for which selected is true) from the cars array to final output.
***Observable Output****
[{
"name":"John",
"age":30,
"cars": [
{ "selected":true, "name":"Ford", "models": "Mustang"},
{ "selected":false, "name":"BMW", "models": "320" },
{ "selected":true, "name":"Fiat", "models":"500" }
]
},
{
"name":"alex",
"age":40,
"cars": [
{ "selected":true, "name":"tesla", "models": "x"},
{ "selected":false, "name":"merc", "models": "300" },
{ "selected":true, "name":"honda", "models":"accord" }
]
}
]
****Desired Format*****
{John:[ford, fiat], Alex:[tesla,honda]}
***Code used*****
const results = item.reduce((r,{name,cars}) => (r[name]=cars,r), {})
//This gives me complete cars object but i need only name from it(and that too for selected true ones).
Edit 1: Do not want to have empty record in the final object. For eg, if Alex does not have any Cars Selected True then i do not want Alex:[] in the final object.
const results = data.reduce((r,{name,cars}) => (r[name]=cars.filter(ch => ch.selected).map(ch => ch.name),r), {});maybe something like this?data.filter(ch => ch.cars.some(car => car.selected)).reduce((r,{name,cars}) => (r[name]=cars.filter(ch => ch.selected).map(ch => ch.name),r), {})