var salesGenerator = (function() { var items = [ { name: "A", cost: 2, color: 'steelblue' }, { name: "B", cost: 2.5, color: 'tomato' }, { name: "C", cost: 1, color: 'mediumturquoise' }, { name: "D", cost: 3, color: 'plum' } ] var newItem = function () { var index = Math.floor(Math.random() * (items.length)); var time = Math.floor(Math.random() * (23)); return { itemName: items[index].name, cost: items[index].cost, hour: time }; } var data = [] for (var i = 0; i < 1000; i++) { data.push(newItem()); } var itemBuckets = []; fillBuckets = function (item) { var bucketData = []; var totalSales = 0; for (var i = 0; i < 24; i++) { bucketData[i] = 0; } data.filter(function(d) { return d.itemName === item.name; }) .forEach(function(itemSale){ bucketData[itemSale.hour]++; totalSales += itemSale.cost; }); var maxSales = d3.max(bucketData); itemBuckets.push({ name: item.name, totalSales: totalSales, maxSales: maxSales, buckets: bucketData, color: item.color }) }; items.forEach(function(item){ fillBuckets(item); }); return { itemBuckets: itemBuckets }; })();