lodash stuff
by willtx
HTML
<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>
CSS
body {
font-family: monospace;
white-space: pre-wrap;
}
JavaScript
var idx = 0;
function addRoomNights(rec) {
//console.log('Object.keys(rec) [' + idx + ']: ' + Object.keys(rec)[0]);
var account;
for(var prop in rec){
account = rec[prop][0];
}
var newRec = {
countryCode: account.countryCode,
brand: account.brand,
roomNights: account.roomNights,
spend: account.hotelSpend
};
//if (idx === 0) {
//
// console.log(JSON.stringify(rec));
// console.log(rec);
// console.log(newRec);
//}
//idx++;
return newRec;
}
_.groupByMulti = function (obj, values) {
if (!values.length) return obj;
var firstGrp = _.groupBy(obj, values[0]),
rest = values.slice(1);
for (var prop in firstGrp) {
firstGrp[prop] = _.groupByMulti(firstGrp[prop], rest);
}
return firstGrp;
};
var groupedData = _.groupByMulti(getProperties(), ['brand', 'countryCode']);
console.log('--------------- GROUPED -----------------------');
console.log(JSON.stringify(groupedData));
console.log('---------------- MAPPED ----------------------');
var mapData = _.map(groupedData, addRoomNights);
console.log(JSON.stringify(mapData));
function getProperties() {
return [{
$id: "1",
id: "54cb22eb67b1fe60183fd0d8",
accountOfficeId: 180499,
accountName: "Apple Inc",
brand: "CO",
countryCode: "HT",
state: null,
city: "Cap-Haïtien",
hotelSpend: 2000,
hotelSpendCurrencyCode: null,
comments: "some comments for apple",
dateCreated: null,
createdBy: "wlopez",
dateProcessed: null,
processedBy: null,
complete: false,
roomNights: 12
}, {
$id: "2",
id: "54cb235b67b1fe60183fd0da",
...