Суммировать значения ключей

как мне суммировать значения одинаковых ключей?

[{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"));

→ Ссылка