Группировка данных Json по годам для создания столбчатой ​​диаграммы с использованием amchart - PullRequest
0 голосов
/ 22 апреля 2019

Я готовлю данные для dataProvider, используя amchart для создания столбчатой ​​диаграммы с накоплением, подобной этой https://www.amcharts.com/demos-v3/stacked-column-chart-v3/, У меня есть ответ моей службы, как показано ниже, и я хочу сгруппировать данные по годам, поэтому мне нужно изменитьданные json:

"Annee": "2018 / 2019",
"Chargeniv1": "Centre",
"MensuelCout": 123
},
{
"Annee": "2018 / 2019",
"Chargeniv1": "Main",
"MensuelCout": 456
},
{
"Annee": "2018 / 2019",
"Chargeniv1": "principaux",
"MensuelCout": 789
},
{
"Annee": "2017 / 2018",
"Chargeniv1": "structure",
"MensuelCout": 101
},
{
"Annee": "2017 / 2018",
"Chargeniv1": "principaux",
"MensuelCout": 629
},
{
"Annee": "2017 / 2018",
"Chargeniv1": "Main",
"MensuelCout": 985
}]

этим

[{
  "annee":"2018 / 2019"
  "Centre": 637612,
  "Main": 456,
  "principaux": 789,
    },
 {
  "annee":"2017 / 2018"
  "Centre": 101,
  "principaux": 629,
  "Main": 987,
}]

спасибо за ваше внимание

Ответы [ 2 ]

1 голос
/ 22 апреля 2019

Я буду использовать функции фильтра и новый набор для уникальных лет.

Ваш ответ json:

    let data = [
          {
            Annee: "2018 / 2019",
            Chargeniv1: "Centre",
            MensuelCout: 123
          }...
        ];

Получить все годы:

var years = new Set();
data.forEach((element, index) => {
  years.add(element.Annee);
});

Создать новыймассив с данными и упорядочить, как вы хотите.

var newData = [];
uniqueYears.forEach((year, index) => {
  newData.push({ year: year, cities: data.filter(y => y.Annee === year) });
});
1 голос
/ 22 апреля 2019

Вы можете использовать функцию reduce для группировки объектов по году и функцию Object.values для извлечения сгруппированных объектов.

let array = [ { "Annee": "2018 / 2019", "Chargeniv1": "Centre", "MensuelCout": 123 }, { "Annee": "2018 / 2019", "Chargeniv1": "Main", "MensuelCout": 456 }, { "Annee": "2018 / 2019", "Chargeniv1": "principaux", "MensuelCout": 789 }, { "Annee": "2017 / 2018", "Chargeniv1": "structure", "MensuelCout": 101 }, { "Annee": "2017 / 2018", "Chargeniv1": "principaux", "MensuelCout": 629 }, { "Annee": "2017 / 2018", "Chargeniv1": "Main", "MensuelCout": 985 }];
let result = Object.values(array.reduce((a, {Annee, Chargeniv1, MensuelCout}) => {
  a[Annee] = a[Annee] || (a[Annee] = {Annee});
  a[Annee][Chargeniv1] = (a[Annee][Chargeniv1] || 0) + MensuelCout;
  return a;
}, {}));

console.log(result);
.as-console-wrapper { min-height: 100%; }
...