javascript - 使用 reduce 进行分组,我如何求和(打字稿)

javascript - using reduce to group by, how do I sum (typescript)

使用 typescript,我 javascript 成功地使用 reduce 函数进行了分组,但我不知道如何求和另一个 属性。

现在所有内容都按 属性 分组:pacct。 (成功)

我正在尝试求和 属性:数量。

有人可以帮忙吗?

这是我从另一个 .ts 导出的界面

    export interface TradeData {
  id: number;
  filedate: Date;
  poffic: string;
  pacct: string;
  quantity: number;
  sector: string;
  psdsC1: string;
  name: string;
  bbsymbol: string;
  last_price: number;
  deltasettlement: number;
}

这是我使用 reduce

的代码
const result = trades.reduce((groupedAccounts, trade) => {
  const account = trade.pacct;
  if (groupedAccounts[account] == null) groupedAccounts[account] = [];
  groupedAccounts[account].push(trade);
  return groupedAccounts;
}, {} as Record<string, TradeData[]>);

我们将给 reduce 一个初始值 0,然后对于每笔交易,我们将数量添加到总数中。

const sum = trades.reduce((total, trade) => total + trade.quantity, 0);

函数的返回值是total的下一个值,所以你可以这样想:

const callback = (total, trade) => total + trade.quantity;

const initialValue = 0;

let total = initialValue;

for (const trade of trades) {
    total = callback(total, trade);
}

为了对每个组求和,让我们遍历每个组,为此,我们将使用 Object.entries:

const entries = Object.entries(groups);

然后我们通过使值成为组数量的总和来转换每个条目:

const summed = entries.map(([key, group]) => {
    const sum = group.reduce((total, trade) => total + trade.quantity, 0);

    return [key, sum];
});

最后我们用 Object.fromEntries:

将条目转回一个对象
const transformed = Object.fromEntries(summed);