Search code examples
jsondatatablesummary

Summarize JSON in table


I have small JSON like this:

let testJson = [
  {"date":"2019.05.21","name":"Péter","num":"8"}, 
  {"date":"2019.05.22","name":"Norbert","num":"6"}, 
  {"date":"2019.05.21","name":"Sándor","num":"7"}, 
  {"date":"2019.05.24","name":"Béla","num":"4"},    
  {"date":"2019.05.23","name":"Sándor","num":"5"},  
  {"date":"2019.05.26","name":"Sándor","num":"6"},  
  {"date":"2019.05.27","name":"Péter","num":"7"},  
  {"date":"2019.05.28","name":"Péter","num":"8"}, 
  {"date":"2019.05.29","name":"Péter","num":"3"}, 
  {"date":"2019.05.30","name":"Péter","num":"6"}, 
  {"date":"2019.05.31","name":"Péter","num":"4"}
];

I would like to aggregate the data like this:

enter image description here


Solution

  • Try this:

    let testJson = [
      {"date":"2019.05.21","name":"Péter","num":"8"}, 
      {"date":"2019.05.22","name":"Norbert","num":"6"}, 
      {"date":"2019.05.21","name":"Sándor","num":"7"}, 
      {"date":"2019.05.24","name":"Béla","num":"4"},    
      {"date":"2019.05.23","name":"Sándor","num":"5"},  
      {"date":"2019.05.26","name":"Sándor","num":"6"},  
      {"date":"2019.05.27","name":"Péter","num":"7"},  
      {"date":"2019.05.28","name":"Péter","num":"8"}, 
      {"date":"2019.05.29","name":"Péter","num":"3"}, 
      {"date":"2019.05.30","name":"Péter","num":"6"}, 
      {"date":"2019.05.31","name":"Péter","num":"4"}
    ];
    const groupBy = (arr) => arr.reduce((acc, ele)=>( (acc[ele.date] = acc[ele.date] || []).push(ele), acc),{})
    const reformat = ([k, v])=> ({date:k,...Object.assign({},...v.map(l=>({[l.name]:l.num})))})
    const result = Object.entries(groupBy(testJson))
    .map(ele=>reformat(ele));
    
    console.log(result);