Group object properties by common values with js
by aaronk85
JavaScript
var name = ["Ted", "Sarah", "Nancy", "Ted", "Sarah", "Nancy"];
var prodID = [111, 222, 222, 222, 222, 222];
var prodName = ["milk", "juice", "juice", "juice", "juice", "juice"];
var qty = [1, 2, 3, 3, 3, 1];
var data = {};
name.forEach(function(nam, i) {
data[nam] = data[nam] || {};
pid = prodID[i];
data[nam][pid] = data[nam][pid] || {total:0, pname: prodName[i]};
data[nam][pid].total += qty[i];
totalQty = 'totalQty';
data[nam][totalQty] = 0;
data[nam][totalQty] += qty[i];
});
console.log(JSON.stringify(data, "", " "));
message = Object.keys(data).map(function(nam) {
var purchases = data[nam];
return nam + ' got ' + Object.keys(purchases).map(function(pid) {
return purchases[pid].total + ' bottle(s) of ' + purchases[pid].pname
}).join(' and ');
}).join(' <br> ');
document.body.innerHTML = message;