-1

getting the response from express api how can change the array data like this thanks in advance help me !

input = [
    { secId: "12", stuName: "aaa", stuGrade: "A", stuTotal: 100 },
    { secId: "12", stuName: "bbb", stuGrade: "A+", stuTotal: 98 },
    { secId: "13", stuName: "ccc", stuGrade: "B", stuTotal: 95 },
    { secId: "13", stuName: "ddd", stuGrade: "A", stuTotal: 70 },
  ];
output = [
    {
      secId: 12,
      stuDetails: [
        { stuName: "aaa", stuGrade: "A", stuTotal: 100 },
        { stuName: "bbb", stuGrade: "A+", stuTotal: 98 },
      ],
    },
    {
      secId: 13,
      stuDetails: [
        { stuName: "ccc", stuGrade: "B", stuTotal: 95 },
        { stuName: "ddd", stuGrade: "A", stuTotal: 70 },
      ],
    },
  ];

1 Answers1

0

We can do it via Array.reduce()

let input = [
    { secId: "12", stuName: "aaa", stuGrade: "A", stuTotal: 100 },
    { secId: "12", stuName: "bbb", stuGrade: "A+", stuTotal: 98 },
    { secId: "13", stuName: "ccc", stuGrade: "B", stuTotal: 95 },
    { secId: "13", stuName: "ddd", stuGrade: "A", stuTotal: 70 },
  ];
  
let output = input.reduce((a,v) => {
   let {secId,...item} = v
   let obj = a.find(i => i.secId === secId)
   if(obj){
     obj.stuDetails.push(item)
   }else{
     a.push({'secId':secId,'stuDetails':[item]})
   }
   return a
},[])
console.log(output)
flyingfox
  • 13,414
  • 3
  • 24
  • 39