Суммировать значения ключей
как мне суммировать значения одинаковых ключей?
[{period: "2021-04-01", revenue: 70883.3, refund: 0, sold_items: 4206, class: "Income"}, {period: "2021-04-01", revenue: -2955.403, refund: 0, sold_items: 4206, class: "COGS"}, {period: "2021-04-01", revenue: 0, refund: 0, sold_items: 4206, class: "COGS"}, {period: "2021-04-01", revenue: 8555.403, refund: 0, sold_items: 4206, class: "COGS"}, {period: "2021-04-01", revenue: -2955.403, refund: 0, sold_items: 4206, class: "COGS"}, {period: "2021-04-01", revenue: -9761.48, refund: 14, sold_items: 4149, class: "FBA_Fees"}
Ответы (2 шт):
Автор решения: Алексей Шиманский
→ Ссылка
let test = [{period: "2021-04-01", revenue: 70883.3, refund: 0, sold_items: 4206, class: "Income"}, {period: "2021-04-01", revenue: -2955.403, refund: 0, sold_items: 4206, class: "COGS"}, {period: "2021-04-01", revenue: 0, refund: 0, sold_items: 4206, class: "COGS"}, {period: "2021-04-01", revenue: 8555.403, refund: 0, sold_items: 4206, class: "COGS"}, {period: "2021-04-01", revenue: -2955.403, refund: 0, sold_items: 4206, class: "COGS"}, {period: "2021-04-01", revenue: -9761.48, refund: 14, sold_items: 4149, class: "FBA_Fees"}];
let result = {};
test.forEach((el, i) => {
if (!result[el.class])
result[el.class] = 0;
result[el.class] += el.revenue;
});
console.log(result);
Да, можно через reduce, но это будет не оч. читаемо, кмк.
Автор решения: Максим Вишневский
→ Ссылка
Вариант через reduce с динамическим ключем:
const data = [
{ period: "2021-04-01", revenue: 70883.3, refund: 0, sold_items: 4206, class: "Income" },
{ period: "2021-04-01", revenue: -2955.403, refund: 0, sold_items: 4206, class: "COGS" },
{ period: "2021-04-01", revenue: 0, refund: 0, sold_items: 4206, class: "COGS" },
{ period: "2021-04-01", revenue: 8555.403, refund: 0, sold_items: 4206, class: "COGS" },
{ period: "2021-04-01", revenue: -2955.403, refund: 0, sold_items: 4206, class: "COGS" },
{ period: "2021-04-01", revenue: -9761.48, refund: 14, sold_items: 4149, class: "FBA_Fees" },
];
const sumByClass = (items, valueKey) => items
.reduce((acc, { class: type, [valueKey]: value }) => {
acc[type] = type in acc ? acc[type] + value : value;
return acc;
}, {});
console.log(sumByClass(data, "revenue"));