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;