суммировать объект
Всем привет подскажите есть объект как сделать так что суммировалась по warehousePrice и по дате
[
{
"date": "2023-10-01",
"nmId": 11111111,
"warehousePrice": 100
},
{
"date": "2023-10-01",
"nmId": 222222,
"warehousePrice": 200
},
{
"date": "2023-10-01",
"nmId": 11111111,
"warehousePrice": 300
},
{
"date": "2023-10-02",
"nmId": 222222,
"warehousePrice": 150
},
{
"date": "2023-10-02",
"nmId": 11111111,
"warehousePrice": 500
},
{
"date": "2023-10-02",
"nmId": 222222,
"warehousePrice": 300
},
]
Итог:
[
{
"date": "2023-10-01",
"nmId": 11111111,
"warehousePrice": 400
},
{
"date": "2023-10-01",
"nmId": 222222,
"warehousePrice": 200
},
{
"date": "2023-10-02",
"nmId": 11111111,
"warehousePrice": 150
},
{
"date": "2023-10-02",
"nmId": 222222,
"warehousePrice": 450
},
]
Ответы (1 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
Строим карту по ключевым полям, накапливаем в значениях суммы, возвращаем в виде массива:
const group = list => {
const m = new Map();
for (const item of list) {
const {date, nmId, warehousePrice} = item;
const key = JSON.stringify([date, nmId]);
if (!m.has(key)) {
m.set(key, {date, nmId, warehousePrice});
} else {
m.get(key).warehousePrice += warehousePrice;
}
}
return Array.from(m.values());
};
console.log(group([
{ "date": "2023-10-01", "nmId": 11111111, "warehousePrice": 100 },
{ "date": "2023-10-01", "nmId": 222222 , "warehousePrice": 200 },
{ "date": "2023-10-01", "nmId": 11111111, "warehousePrice": 300 },
{ "date": "2023-10-02", "nmId": 222222 , "warehousePrice": 150 },
{ "date": "2023-10-02", "nmId": 11111111, "warehousePrice": 500 },
{ "date": "2023-10-02", "nmId": 222222 , "warehousePrice": 300 }
]));