使用x y坐标将Json或Mongodata解析为viz.js数据集?

时间:2016-06-24 04:48:08

标签: javascript json mongodb meteor

我的Json数据是这样的:

[ {
    "age": 21,
    "eyeColor": "blue",
    "name": "Dejesus Thornton",
    "gender": "male",
    "registered": "2015-06-10"
  },
{
    "age": 21,
    "eyeColor": "blue",
    "name": "Dejesus Thornton",
    "gender": "male",
    "registered": "2015-06-11"
  },
{
    "age": 21,
    "eyeColor": "blue",
    "name": "Dejesus Thornton",
    "gender": "male",
    "registered": "2015-06-12"
  },
...
]

我把它解析成我的meteor mongo集合,就像这样(集合中的每个项目都是一个对象):

{
    "age": 21,
    "eyeColor": "blue",
    "name": "Dejesus Thornton",
    "gender": "male",
    "registered": "2015-06-11"
}

我试图将这类数据解析为viz.js,接受这样的数据:

var items = [
    {x: '2014-06-13', y: 30, group: 0},
    {x: '2014-06-14', y: 10, group: 0},
    {x: '2014-06-15', y: 15, group: 1},
    {x: '2014-06-16', y: 30, group: 1},
    {x: '2014-06-17', y: 10, group: 1},
    {x: '2014-06-18', y: 15, group: 1}
];

我正在计算在同一天注册的人数或具有相同的眼睛颜色(同样的事情)。

1 个答案:

答案 0 :(得分:0)

很简单。使用 Array.prototype.reduce()进行计数。将原始数据数组分配给名为 rawArray 的变量。

var rawArray = [ {
    "age": 21,
    "eyeColor": "blue",
    "name": "Dejesus Thornton",
    "gender": "male",
    "registered": "2015-06-10"
  },
{
    "age": 21,
    "eyeColor": "blue",
    "name": "Dejesus Thornton",
    "gender": "male",
    "registered": "2015-06-11"
  },
{
    "age": 21,
    "eyeColor": "blue",
    "name": "Dejesus Thornton",
    "gender": "male",
    "registered": "2015-06-12"
  },
...
]

然后,按每个项目的特定属性进行分组。像这样:

function groupByProperty(array, property) {
  var newObject = array.reduce(function(counters, item) {
    if(!counters[item[property]]) {
      counters[item[property]] = 1;
    }
    else {
      counters[item[property]] += 1;
    }
    return counters;
  }, {});
  return Object.keys(newObject).map(function(x) {
    var obj = {
      x: x,
      y: newObject[x],
      group: 0
    };
    return obj; 
  });
}

console.log(groupByProperty(rawArray, 'registered')); // Group by 'registered'.

//  [ {
//    group: 0,
//    x: "2015-06-10",
//    y: 1
//  }, {
//    group: 0,
//    x: "2015-06-11",
//    y: 1
//  }, {
//    group: 0,
//    x: "2015-06-12",
//    y: 1
//  }]

console.log(groupByProperty(rawArray, 'eyeColor')); // Group by 'eyeColor'.

//  [{
//    group: 0,
//    x: "blue",
//    y: 3
//  }]