我如何从对象分组数据?

问题描述 投票:-1回答:1

我想返回按类型分组的数组,这是我的数据:

const array = [
    {Type: 1, data: { '11': 10, '12': 10 }},
    {Type: 1, data: { '11': 20, '13': 20 }},
    {Type: 2, data: { '14': 10, '15': 20 }}
];

我使用Array.forEach和Object.keys ...

但是我对那些功能不熟悉

我如何像这样对数据分组:

{
    1 : {
        "11" : {
            "sum" : 30,
            "count" : 2
        },
        "12" : {
            "sum" : 10,
            "count" : 1
        },
        "13" : {
            "sum" : 20,
            "count" : 1
        },
    },
    2 : {
        "14" : {
             "sum" : 10,
            "count" : 1
        },
        "15" : {
            "sum" : 20,
            "count" : 1
         },
    }
}
javascript object
1个回答
1
投票

使用reduce函数按类型分组并在您需要的条件下使用它

const array = [{
    Type: 1,
    data: {
      '11': 10,
      '12': 10
    }
  },
  {
    Type: 1,
    data: {
      '11': 20,
      '13': 20
    }
  },
  {
    Type: 2,
    data: {
      '14': 10,
      '15': 20
    }
  }
];

var res = array.reduce((acc, curr) => {
  if (acc[curr.Type]) {
    for (key in curr.data) {
      if (acc[curr.Type][key]) {
        acc[curr.Type][key] = {
          "sum": acc[curr.Type][key].sum + curr.data[key],
          "count": 1 + acc[curr.Type][key].count
        };
      } else {
        acc[curr.Type][key] = {
          "sum": curr.data[key],
          "count": 1
        };
      }
    }
  } else {
    acc[curr.Type]={};
    for (key in curr.data) {
      acc[curr.Type][key] = {
        "sum": curr.data[key],
        "count": 1
      };
    }
  }
  return acc;
}, {})

console.log(res);
© www.soinside.com 2019 - 2024. All rights reserved.