【问题标题】:Grouping an Array and then summing values对数组进行分组,然后对值求和
【发布时间】:2021-07-12 04:20:52
【问题描述】:

我有这个结构中的数据从我的节点进入我的 React。

[
{Field: Data, WinningPlayer: "Name1", Points: 3}
{Field: Data, WinningPlayer: "Name2", Points: 8}
{Field: Data, WinningPlayer: "Name1", Points: 4}
{Field: Data, WinningPlayer: "Name2", Points: 2}
]

我如何在 WinningPlayer 上进行分组,然后对该玩家的值求和。我浏览了一些帖子,但我无法理解如何使用 reduce 或任何其他数组函数。有人可以帮忙吗?

【问题讨论】:

标签: javascript arrays


【解决方案1】:

如果我正确理解了您的问题,这应该可以解决问题:

playerPoints = [
{Field:'', WinningPlayer: "Name1", Points: 3},
{Field: '', WinningPlayer: "Name2", Points: 8},
{Field: '', WinningPlayer: "Name1", Points: 4},
{Field: '', WinningPlayer: "Name2", Points: 2},
];

summedUpPoints = {}

playerPoints.forEach(data => {
    if( typeof summedUpPoints[data.WinningPlayer] === 'undefined'){
    summedUpPoints[data.WinningPlayer] = data.Points;
  }else{
    summedUpPoints[data.WinningPlayer] += data.Points;
  }
});

console.log(summedUpPoints);

【讨论】:

    【解决方案2】:

    我个人会为此使用Array.prototype.reduce 函数:

    const data = [{WinningPlayer: "Name1", Points: 3},{WinningPlayer: "Name2", Points: 8},{WinningPlayer: "Name1", Points: 4},{WinningPlayer: "Name2", Points: 2}];
    
    const out = data.reduce((acc, entry) => {
      if (acc[entry.WinningPlayer]) acc[entry.WinningPlayer] += entry.Points;
      else acc[entry.WinningPlayer] = entry.Points;
      return acc;
    }, {} /* <-- starting object */ );
    
    console.log(out);

    【讨论】:

      【解决方案3】:

      你可以像这样使用Array.prototype.reduce()

      const input = [
        { Field: "Data", WinningPlayer: "Name1", Points: 3 },
        { Field: "Data", WinningPlayer: "Name2", Points: 8 },
        { Field: "Data", WinningPlayer: "Name1", Points: 4 },
        { Field: "Data", WinningPlayer: "Name2", Points: 2 },
      ];
      
      const result = input.reduce((acc, cur) => {
        const found = acc.find((x) => x.WinningPlayer === cur.WinningPlayer);
        found ? (found.Points += cur.Points) : acc.push(cur);
        return acc;
      }, []);
      
      console.log(result);

      【讨论】:

        猜你喜欢
        • 2021-07-13
        • 2018-06-21
        • 2021-11-01
        • 1970-01-01
        • 2019-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多