My JSON looks like this
{"rows":[
{"shiftId":1,"shift":"Morning","item":"Tea","value":20},
{"shiftId":1,"shift":"Morning","item":"Coffee","value":30},
{"shiftId":2,"shift":"Evening","item":"Tea","value":40},
{"shiftId":2,"shift":"Evening","item":"Coffee","value":35}
]}
and I am looking to merge all the same shift and add the values of the merged keys together and create new Object for item to get something looking like this
{"rows":[
{
"shiftId":1,
"shift":"Morning",
"item":[{"itemName":"Tea"},{"itemName":"Coffee"}],
"value":50
},
{
"shiftId":2,
"shift":"Evening",
"item":[{"itemName":"Tea"},{"itemName":"Coffee"}],
"value":75
}
]}
I am try like this
var merged = {rows: []};
data.forEach(function (source) {
if (!merged.rows.some(function (row) {
return row.shiftId == source.shiftId;
})) {
merged.rows.push({
shiftId: source.shift,
shift: source.shift,
item: [{
itemName: source.shift
}],
value: source.value
});
} else {
var existRow = merged.rows.filter(function (existRow) {
return existRow.shiftId == source.shiftId
})[0];
existRow.total += source.total;
existRow.item = source.item.push(existRow.item);
}
});
But not working correctly. Thanks advance.
Array.prototype.reduce.