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
Post a Comment