function uniqueWithSum(arr, key, sumKey) {
const getKey = key instanceof Function ? key : n => n[key];
return Object.values(arr.reduce((acc, n) => {
const k = getKey(n);
acc[k] = acc[k] || Object.assign(new n.constructor, n, { [sumKey]: 0 });
acc[k][sumKey] += n[sumKey];
return acc;
}, {}));
}
// ваш случай
const result = uniqueWithSum(arr, n => n.id, 'duration');
// элементам не обязательно быть объектами, это могут быть и массивы
uniqueWithSum([
[ 'A', 1 ],
[ 'B', 5 ],
[ 'A', 2 ],
[ 'A', 3 ],
], 0, 1) // [ [ 'A', 6 ], [ 'B', 5 ] ]