Вот мой массив:
let object = [
{
product: 'Монтажный комплект 5 м с вальцовкой; Основной',
price: 0,
selling_price: 3951,
quantity: 1
},
{
product: 'Монтажный комплект 5 м с вальцовкой; Основной',
price: 2346,
selling_price: 0,
quantity: 0
},
{
product: 'Монтажный комплект 5 м с вальцовкой; Основной',
price: 0,
selling_price: 3951,
quantity: 1
},
{
product: 'Монтажный комплект 5 м с вальцовкой; Основной',
price: 2142,
selling_price: 0,
quantity: 0
}
]
Делаю так:
let result = object.reduce(
(callback, product) => (
((callback[product.product] ??= {
...product,
selling_price: Number(),
}).selling_price += +product.selling_price),
// console.log("quantityhere", product.quantity),
((callback[product.product] ??= {
...product,
quantity: Number(),
}).quantity += +product.quantity),
((callback[product.product] ??= {
...product,
price: Number(),
}).price += +product.price),
callback
),
{}
);
console.log(result)
Output result будет
{
'Монтажный комплект 5 м с вальцовкой; Основной': {
product: 'Монтажный комплект 5 м с вальцовкой; Основной',
price: 4488,
selling_price: 7902,
quantity: 3
}
}
Но тут есть ошибка, quantity вместо ожидаемых 2, получается 3.
Это связано с тем, что мы делаем сложение -> element += +element.
Я не понимаю как это фиксить и не знаю какие, другие, методы использовать для сложения этого массива.
Желаемый result в данном случае:
{
'Монтажный комплект 5 м с вальцовкой; Основной': {
product: 'Монтажный комплект 5 м с вальцовкой; Основной',
price: 4488,
selling_price: 7902,
quantity: 2
}
}