2016-06-24 61 views
0

我的JSON數據是這樣的:使用xy座標將Json或Mongodata解析爲viz.js數據集?

[ { 
    "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" 
    }, 
... 
] 

我解析它變成我的流星蒙戈集合是這樣的(在收集每一個項目都是一個對象):

{ 
    "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

很簡單。使用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 
// }]