arrays - javascript object literal, combining values of objects within same literal -


i trying create new object looping through below , combining values of objects have types?

so have this:

var data = [{                  transid: 123,                 repid: 86,                 profit: 117.3,                 expense: 96.76 },              {                 transid: 124,                 repid: 35,                 profit: 47.39,                 expense: 15.15 },              {                 transid: 125,                 repid: 86,                 profit: 62.62,                 expense: 15.17 }] 

so need create new array same above, each rep want 1 object sum of profit , expense (so no transid either):

            [{                  repid: 86,                 profit: 179.92,                 expense: 111.93 },              {                 repid: 35,                 profit: 47.39,                 expense: 15.15 }] 

i learning (go easy may totally wrong) have tried things like:

    var otherdata = [];     ( var = 0; < data.length; i++ ) {       var thisdataobj = data[i];       ( var j = 0; j < data.length; i++) {       var thiscompareddata = data[j]; // maybe ridiculous approach ??       if(thisdataobj.repid == thiscompareddata.repid) {         if(thisdataojb.transid != thiscompareddata.transid) {             // struggling part if event right approach             // loop bad because recount         }       }     } 

so without showing things tried within loop, pretty sure wrong recount values if tried sum, create object , push it. not sure better way?

any appreciated.

just not sure better way?

yes, can use object lookup map new objects repid:

var map = {}; (var i=0; i<data.length; i++) {     var obj = data[i],         id = obj.repid;     if (id in map) { // know id         // object , sum properties         map[id].profit += obj.profit;         map[id].expense += obj.expense;     } else // create new 1         map[id] = {             repid: id,             profit: obj.profit,             expense: obj.profit        }; } /* map: {     "35":{"repid":35,"profit":47.39,"expense":47.39},     "86":{"repid":86,"profit":179.92,"expense":132.47} } */ // put values map in array var otherdata = []; (var id in map)     otherdata.push(map[id]); /* otherdata: [     {"repid":35,"profit":47.39,"expense":47.39},     {"repid":86,"profit":179.92,"expense":132.47} ] */ 

Comments