按对象数组分组并计算键值的总数

Group By array of objects and calculate total for key value

我有一个对象数组:

let recipe = [
  {
    Type:"AAAA",
    Total: 20
  },
  {
    Type:"BBBB",
    Total: 20,
  },
  {
    Type:"BBBB",
    Total: 20,
  },
  {
    Type:"AAAA",
    Total: 20,
  },
  {
    Type:"AAAA",
    Total: 20,
  }
]

我想使用 javascript(无库)得到这样的最终形式:

let finalRecipe = [["AAAA",60],["BBBB",40]]

我试过用这个但没用

let recipeModified = recipe.reduce((r, timeoff) => {
  const { Type, Total } = timeoff;
  const totalSum = Object.values({
    Total,
  }).reduce((acc, val) => ([...acc, ...val], []));

  r[Type] = [...(r[Type] || []), totalSum];

  return r;
}, {}) 

https://codesandbox.io/s/cranky-ishizaka-i7m6v?file=/src/index.js

您可以使用函数 Array.prototype.reduceType 对对象进行分组,并使用函数 Object.values 提取分组的对象。

let recipe = [  {    Type:"AAAA",    Total: 20  },  {    Type:"BBBB",    Total: 20,  },  {    Type:"BBBB",    Total: 20,  },  {    Type:"AAAA",    Total: 20,  },  {    Type:"AAAA",    Total: 20,  }],
    result = Object.values(recipe.reduce((r, {Type, Total}) => {
      (r[Type] || (r[Type] = [Type, 0]))[1] += Total;
      return r;
    }, {}));

console.log(result);