JSFiddle - React, Tailwind, and code Playground

JavaScript

var a = [{
    "id": "abcd",
        "val1": 1,
        "val2": 1,
        "val3": 0
}, {
    "id": "abcd",
        "val1": 1,
        "val2": 1,
        "val3": 1
}, {
    "id": "efgh",
        "val1": 0,
        "val2": 0,
        "val3": 1
}];

// clone a
a2 = JSON.parse(JSON.stringify(a));

// make sure elements with the same id are next to each other
a2.sort(function (x, y) {
    if (x['id'] < y['id']) {
        return -1;
    }
    if (x['id'] > y['id']) {
        return 1;
    }
    return 0;
});

// iterate over each one, if this one has the same id as the previous one, accumulate
// else add to b
var lastId;
var b = [];
for (var i = 0; i < a2.length; i++) {
    if (lastId == a2[i]['id']) {
        b[b.length-1]['val1'] += a2[i]['val1'];
        b[b.length-1]['val2'] += a2[i]['val2'];
        b[b.length-1]['val3'] += a2[i]['val3'];
    } else {
        b[b.length] = (a2[i]);
        lastId = a2[i]['id'];
    }
}

console.log(b);