Как сложить элементы в массиве объектов (поэлементно)?
a.reduce((acc, n) => (acc.val1 += n.val1, acc.val2 += n.val2, acc), { val1: 0, val2: 0 })
или, если имена свойств заранее неизвестны, и вообще, в разных элементах массива могут быть разными:a.reduce((acc, n) => (Object.entries(n).forEach(([k, v]) => acc[k] = (acc[k] || 0) + v), acc), {})
Я бы предпочёл такое решение задачи, основанное исключительно на ES-5 и предоставляющее суммы всех свойств по отдельности:var a = [
{val1: 1, val2: 1},
{val1: 2, val2: 2},
{val1: 3, val2: 3}
];

function sumProps (arr) {
	var out = {};
	arr.forEach(function(i) {
		for (var p in i) {
			if (i.hasOwnProperty(p)) {
				out[p] = out[p] || 0;
				out[p] += i[p];
			}
		}
	});
	return out;
}
console.log(sumProps (a));