javascript - 使用 JavaScript 的 C3 数据的数据结构/格式
问题描述
我正在尝试以创建 C3 条形图所需的格式获取对象数组,但我无法使用 JavaScript 对数据进行分类。下面是我的 JavaScript 代码。
data = [
{Service:"Army",Permanent:20,Itinerant:754,Region:"Western"},
{Service:"Air Force",Permanent:100,Itinerant:2,Region:"Eastern"},
{Service:"Army",Permanent:10,Itinerant:7,Region:"Western"},
{Service:"Air Force",Permanent:30,Itinerant:2,Region:"Eastern"}
]
var sumAry=[];
for (var x=0; x<data.length; x++){
var val =sumAry.indexOf(data[x].Service);
if(val === -1){
var permanent += data[x].Permanent;
sumAry.push(data[x].Service, permanent);
}else{
console.log("IN");
}
}
https://codepen.io/isogunro/pen/GYRKqE?editors=0012
C3 图表以如下所示的结构/格式查找数据:
['Army', 30],
['Airorce', 130],
['Navy', 190],
['Army1', 70],
['Airorce2', 130],
['Navy3', 100]
对于每个值,将添加“永久”属性以获取数组的数字部分。它成为所有信息的集合。
解决方案
假设首选格式的数字来自Permanent
属性,您可以使用Array.map来转换数据集。
var data = [{
Service: "Army",
Permanent: 654,
Itinerant: 754,
Region: "Western"
},
{
Service: "Air Force",
Permanent: 9,
Itinerant: 2,
Region: "Eastern"
},
{
Service: "Army",
Permanent: 6,
Itinerant: 7,
Region: "Western"
},
{
Service: "Air Force",
Permanent: 9,
Itinerant: 2,
Region: "Eastern"
}
];
var aggregates = data.map(function (o) {
// map original objects to new ones with zeroed-out data
return {
Service: o.Service,
Permanent: 0,
}
}).filter(function (o, index, a) {
// filter the list to have only unique `Service` properties
var service = o.Service;
var i;
for (i = 0; i < a.length; i += 1) {
if (a[i].Service === service) {
// break out of the loop when the first matching `Service` is found.
break;
}
}
// `i` is now the index of the first matching `Service`.
// if it's the first occurrence of that `Service`, keep it, otherwise ditch it.
return i === index;
});
data.forEach(function (o) {
// loop through the aggregate list and get the matching `Service` property.
var agg = aggregates.filter(function (p) {
return o.Service === p.Service;
})[0]; // first element is the match.
// sum the `Permanent` properties.
agg.Permanent += o.Permanent;
});
// now that the data has been aggregated, transform it into the needed structure.
var c3data = aggregates.map(function (d) {
return [d.Service, d.Permanent];
});
console.log(JSON.stringify(c3data));
推荐阅读
- python - 如何保存不同文件中特定列的总和
- html - CSS 从最后一个元素向上选择
- java - 使用 gradle 构建 javax/xml/bind/JAXBException
- python - Pyper:尽管模型在 R 中运行良好,但预测返回 None
- elasticsearch - 弹性搜索不允许我在以前设置的新模板版本中索引字段启用 false
- sql - xml导入到sql表
- regex - 如何仅将单词的一部分与正则表达式实体匹配?
- github - 如何将我的大学(企业)GitHub for CI 与我的 Heroku 应用程序连接起来
- angular - 身份验证时的Angular RxJS主题问题
- python - 从列表字典创建 MultiIndex 数据框