Делаем ровно то, что спрошено:
const result = Object.values(data.reduce((acc, n) => (
(acc[n.brand] ??= { ...n, price: 0 }).price += n.price,
acc
), {}));
Или, решаем задачу в более общем виде:
function uniqueWithSum(data, key, sumKey) {
const getKey = key instanceof Function ? key : n => n[key];
const unique = new Map;
for (const n of data) {
const k = getKey(n);
unique
.set(k, unique.get(k) ?? Object.assign(new n.constructor, n, { [sumKey]: 0 }))
.get(k)[sumKey] += n[sumKey];
}
return unique;
}
// ваш случай
const result = [...uniqueWithSum(data, 'brand', 'price').values()];
// элементам исходного массива не обязательно быть объектами
Array.from(uniqueWithSum([
[ 'aaa', 1 ],
[ 'aaa', 10 ],
[ 'aaa', 100 ],
[ 'bbb', 666 ],
], 0, 1).values()) // [ [ 'aaa', 111 ], [ 'bbb', 666 ] ]