Reduce nested object based on attribute javascript

Viewed 35

I have an nested object like this

const data = [
  { id: '1', description: 'desc 1', 
   data : [
  { id: '5', description: 'desc',  number :1 },
  { id: '4', description: 'descip',  number :2 } ],
  { id: '2', description: 'desc 2', 
   data: [
  { id: '5', description: 'desc', number: 3 },
  { id: '4', description: 'descip', number: 4 },
  { id: '2', description: 'descipr', number: 6 }
   ]},
];

i want this object to be like this using the reduce methode and pass the data to chartjs

data =[
 desc :  { id: '5', description: { 'desc1' ,'desc2'},  number :{1,3}  },
 descip: { id: '4', description: { 'desc1' ,'desc2'},  number :{2,4} },
 descipr: { id: '2', description: { 'desc2'},  number :{6} }

]

Please any kind of help is appreciated

1 Answers

So a basic groupBy function ?

const data = [
  { id: '1', description: 'desc 1', number: 1 },
  { id: '2', description: 'desc 2', number: 2 },
  { id: '3', description: 'desc 2', number: 3 },
  { id: '4', description: 'desc 1', number: 4 },
  { id: '5', description: 'desc 4', number: 5 },
];

const grouped = data.reduce((p, n) => ({
  ...p,
  [[n.description]]: (p[n.description] ?? []).concat(n)
}), {});

console.log(grouped);

Related