Как мне сгруппировать данные из объекта? - PullRequest
0 голосов
/ 06 марта 2020

Я хочу вернуть массив, сгруппированный по типу. Вот мои данные:

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
         },
    }
}

1 Ответ

0 голосов
/ 06 марта 2020

Используйте , чтобы уменьшить функцию для группировки по типу и используйте ее с условием, которое вам требуется

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...