我的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}
];
我正在计算在同一天注册的人数或具有相同的眼睛颜色(同样的事情)。
答案 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
// }]