获取 json 数据中的值计数并根据 c3 table 的值创建变量

Get count of values in json data and create variable based on those for c3 table

我正在尝试创建一个动态圆环图,因为我不知道将有多少变量进入,但数据集将在 10,000 个中,变量在 1 到 20 个之间。

我已经将我的数据放入一个数组中,如下所示。

如何为数组中的每个唯一元素及其计数创建一个 var,即 var 1 = [sys1, 94] 或类似物,以便它们可以在列和颜色配置中使用

原始数据

res.data[{system:'sys1'},
         {system:'sys1'},
         {system:'sys2'},
         {system:'sys1'},
         {system:'sys3'},
         {system:'sys3'}]

获取密钥

var array_elements = []
angular.forEach(res.data, function(value, key){
    if (array_elements.indexOf(value.system) === -1){
        array_elements.push(value.system)        
    }
})

array_elements = ["sys1", "sys2",  "sys3"];

配置

var donutData = {
    type : 'donut',
    colors: {
  Cats: $.pfPaletteColors.blue,
  Hamsters: $.pfPaletteColors.green,
  Fish: $.pfPaletteColors.orange,
  Dogs: $.pfPaletteColors.red
},
    columns: [
  ['Dogs', 2],
  ['Cats', 2],
  ['Fish', 3],
  ['Hamsters', 1]
],

你可以这样做:

var data = [{
  system: 'sys1'
}, {
  system: 'sys1'
}, {
  system: 'sys2'
}, {
  system: 'sys1'
}, {
  system: 'sys3'
}, {
  system: 'sys3'
}];

var tmp = {};
data.forEach(function(x) {
    tmp[x.system] = (tmp[x.system] || 0) + 1;
});

var keys = Object.keys(graphData);

var finalData = [];
for(var i = 0; i < keys.length; i++) {
    var x = [];
    x.push(keys[i]);
    x.push(graphData[keys[i]]);
   finalData.push(x);
}
console.log(finalData);

Fiddle example