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);