I have a an array consist of datas , where each datas has multiple subDatas,
var res = [
{
data1:{subData1:56, subData2:0, subData3:45},
data2:{subData2:565, subData3:67, subData4:45},
data3:{subData1:45, subData3:0},
data4:{subData1:32, subData2:0, subData3:47},
data5:{subData1:107, subData2:34, subData3:65},
data6:{subData3:123, subData4:43},
data7:{subData1:432, subData2:67, subData3:78},
data8:{subData4:23, subData5:432, subData6:654},
}
];
i need to get the sum of each subDatas in an array, i have figured out the solution but how can i reduce the code . Please find the below code for solving and suggest a better optimized way. I am using underscore js too.
var res = [
{
data1:{subData1:56, subData2:0, subData3:45},
data2:{subData2:565, subData3:67, subData4:45},
data3:{subData1:45, subData3:0},
data4:{subData1:32, subData2:0, subData3:47},
data5:{subData1:107, subData2:34, subData3:65},
data6:{subData3:123, subData4:43},
data7:{subData1:432, subData2:67, subData3:78},
data8:{subData4:23, subData5:432, subData6:654},
}
];
var values = Object.values(res[0])
var arrayOfItems = [];
var sums = {};
values.map(obj => Object.keys(obj)).map(item => {item.map(subItem => arrayOfItems.push(subItem))})
arrayOfItems = _.uniq(arrayOfItems)
_.each(values, function (item) {
_.each(arrayOfItems, function (color) {
if(sums.hasOwnProperty(color)){
sums[color] = sums[color] + ( item[color] ? item[color] : 0 )
}else{
sums[color] = 0 + (item[color] ? item[color] : 0)
}
});
});
var arrOfSubDatasTotal = Object.keys(sums).map(item => ({name:item, total:sums[item]}))
var totalOfSubDatas = Object.values(sums).reduce((a,b) => a + b)
console.log("array Of SubDatas Total =>", arrOfSubDatasTotal)
console.log("total Of SubDatas =>", totalOfSubDatas)
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.9.1/underscore-min.js"></script>