const groupSum = (arr, idKey, ...sumKeys) =>
Object.values(arr.reduce((acc, n) => (
acc[n[idKey]] ??= sumKeys.reduce((group, k) => (
group[k] = 0,
group
), Object.assign(new n.constructor, n)),
sumKeys.forEach(k => acc[n[idKey]][k] += n[k]),
acc
), {}));
// ваш случай
const result = groupSum(arr, 'product', 'price', 'selling_price', 'quantity');
// элементам исходного массива не обязательно быть объектами, это могут быть и массивы
groupSum([
[ 'A', 1, 10 ],
[ 'A', 2, 20 ],
[ 'A', 3, 30 ],
[ 'B', 1, 5 ],
[ 'B', 10, 5 ],
[ 'B', 100, 5 ],
], 0, 1, 2) // [ [ 'A', 6, 60 ], [ 'B', 111, 15 ] ]