JSFiddle - React, Tailwind, and code Playground

by notarazi

JavaScript

function groupBy(array, col, value) {
    var r = [], o = {};
    array.forEach(function (a) {
        if (!o[a[col]]) {
            o[a[col]] = {};
            o[a[col]][col] = a[col];
            o[a[col]][value] = 0;
            r.push(o[a[col]]);
        }
        o[a[col]][value] += +a[value];
    });
    return r;
};

var data = [{Phase:"201611",Step:"Step 1",Task:"Task 1",Value:"5"},{Phase:"201611",Step:"Step 1",Task:"Task 2",Value:"10"},{Phase:"201611",Step:"Step 2",Task:"Task 1",Value:"15"},{Phase:"201611",Step:"Step 2",Task:"Task 2",Value:"20"},{Phase:"201611",Step:"Step 1",Task:"Task 1",Value:"25"},{Phase:"201610",Step:"Step 1",Task:"Task 2",Value:"30"},{Phase:"201610",Step:"Step 2",Task:"Task 1",Value:"35"},{Phase:"201609",Step:"Step 2",Task:"Task 2",Value:"40"}];

document.write('<pre>' + JSON.stringify(groupBy(data, 'Phase', 'Value'), 0, 4) + '</pre>');