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

问题描述

我有一个对象数组:

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

我想使用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.reduce通过Type对对象进行分组,并使用函数Object.values来提取分组的对象。

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

console.log(result);