JSFiddle - React, Tailwind, and code Playground

by sushant_ceb

JavaScript

var data = [{
  "product": "ESPN",
  "type": "subscription",
  "frequency": "monthly",
  "amount": "15"
}, {
  "product": "ESPN",
  "type": "contract",
  "frequency": "perpetual",
  "amount": "15"
}, {
  "product": "Sports Illustrated",
  "type": "subscription",
  "frequency": "monthly",
  "amount": "10"
}, {
  "product": "Golf Digest",
  "type": "subscription",
  "frequency": "yearly",
  "amount": "30"
}, {
  "product": "Alarm System",
  "type": "contract",
  "frequency": "monthly",
  "amount": "14"
}, {
  "product": "Equipment Fee",
  "type": "fee",
  "frequency": "onetime",
  "amount": "10"
}, {
  "product": "Installation",
  "type": "fee",
  "frequency": "onetime",
  "amount": "25"
}, {
  "product": "Installation",
  "type": "fee",
  "frequency": "annual",
  "amount": "25"
}];
var summary = {};
for (var i = 0; i < data.length; i++) {
  if (typeof summary[data[i].type] === 'undefined') {
    summary[data[i].type] = {
      [data[i].frequency]: {
        amount: parseInt(data[i].amount),
        items: [data[i]]
      }, amount: parseInt(data[i].amount)
    };
  } else {
    if (typeof summary[data[i].type][data[i].frequency] === 'undefined') {
      summary[data[i].type][data[i].frequency] = {
        amount: 0,
        items: []
      };
      summary[data[i].type][data[i].frequency].items.push(data[i]);
      summary[data[i].type][data[i].frequency].amount += parseInt(data[i].amount);
      summary[data[i].type]['amount'] += parseInt(data[i].amount);
    } else {
      summary[data[i].type][data[i].frequency].items.push(data[i]);
      summary[data[i].type][data[i].frequency].amount += parseInt(data[i].amount);
      summary[data[i].type]['amount'] += parseInt(data[i].amount);
    }
  }
}
console.log(summary);