Поэтому у меня есть переменная объекта массива с этой структурой
var array_obj = [
{
Gooble: 240,
year: 2018
},
{
Koolle: 220,
year: 2018
}
{
Zooae: 220,
year: 2015
}
];
Но я хочу следовать этой структуре, а https://www.amcharts.com/demos/stacked-column-chart
Так что теперь это должно быть
var array_obj = [
{
Gooble: 240,
Koolle: 220,
year: 2018
},
{
Zooae: 220,
year: 2015
}
];
Я пытался с этим циклом, но я не могу сделать это правильно.
for(var i in array_obj){
if(array_obj[i].year == array_obj[i].year){
# Push here
}
}
Другим решением является создание объекта с годом в виде ключей и комбинированных данных в качестве значений:
var array_obj = [{
Gooble: 240,
year: 2018
},
{
Koolle: 220,
year: 2018
},
{
Zooae: 220,
year: 2015
}
];
let yearBuckets = {};
array_obj.forEach(b => {
if (b.year in yearBuckets) Object.assign(yearBuckets[b.year], b);
else yearBuckets[b.year] = b;
});
console.log(Object.values(yearBuckets));
Используйте reduce
для создания объекта объектов, индексированных по году, сначала создавая подобъект, если он не существует, а затем перебирает свойства, отличные от года, и назначая соответствующий ключ в подобъекте.
Также обязательно исправьте свой вход array_obj
- все элементы массива должны быть разделены запятыми, чтобы синтаксис был действительным:
var array_obj = [
{
Gooble: 240,
year: 2018
},
{
Koolle: 220,
year: 2018
},
{
Zooae: 220,
year: 2015
}
];
const outputByYear = array_obj.reduce((a, { year, ...rest }) => {
if (!a[year]) a[year] = { year };
Object.entries(rest).forEach(([key, val]) => {
a[year][key] = val;
});
return a;
}, {});
console.log(Object.values(outputByYear));
[{ year: 2018, entries: [{ name: 'Zooae', value: 220 }, ...] }, ...]
или аналогичные?