Как использовать данные группы .reduce ()? - PullRequest
0 голосов
/ 10 апреля 2020

Пожалуйста, посмотрите на пример данных.
Я хочу рекурсивно сгруппировать по этому.

const array = [
    { Type: 3, platform: 3 },
    { Type: 2, platform: 3 },
    { Type: 3, platform: 1 },
    { Type: 3, platform: 1 }
]

Я хочу сгруппировать по платформе
, как это Или лучше презентация:

{ 
  platform: 3,
  '3': 2,       // Type : Type's count 
  '2': 1.       // Type : Type's count 
},
{ 
  platform: 1,
  '3': 2,       // Type : Type's count 
}

Ответы [ 2 ]

0 голосов
/ 13 апреля 2020

попробуйте это:

const array = [
    { Type: 3, platform: 3 },
    { Type: 2, platform: 3 },
    { Type: 3, platform: 1 },
    { Type: 3, platform: 1 }
]


const results = array.reduce((aggr,curr) => {
let platform = aggr.filter(i => i.platform === curr.platform);
if(platform.length < 1) {
platform = {platform: curr.platform, [curr.Type]:1}
aggr.push(platform)
}else {
 platform[0][curr.Type] = (platform[0][curr.Type]||0)+1
}

return aggr;

}, [])

console.log(results)
0 голосов
/ 13 апреля 2020

Попробуйте это, Не тот же вывод, но лучшее представление

const array = [
    { Type: 3, platform: 3 },
    { Type: 3, platform: 1 },
    { Type: 3, platform: 1 },
    { Type: 3, platform: 3 },
    { Type: 2, platform: 3 }
]

const data = array.reduce((acc, item) => {
  const key = `platform-${item.platform}`;
  if(acc[key]) {
    if(Object.keys(acc[key])[0] == item.Type) {
     acc[key][item.Type] = {count: acc[key][item.Type].count + 1} 
   }else {
     acc[key][item.Type] = {count: 1}
   }
   } else {
  acc[key] = {};
  acc[key][item.Type] = {count: 1}
}
return acc;
}, {});

console.log(data);

Примечание: для лучшего представления кода вы можете настроить этот код, используя es6, например (Object.assign et c).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...