JSON按count分组,输出到键值对json结果
JSON Group by count, output to key value pair json result
我有以下 JSON 数据
"rows": [{
"createdDate": "3/11/2016",
"createdBy": "Bob"
},{
"createdDate": "3/12/2016",
"createdBy": "Megan"
},{
"createdDate": "3/12/2016",
"createdBy": "Bob"
},{
"createdDate": "3/13/2016",
"createdBy": "Sam"
},{
"createdDate": "3/11/2016",
"createdBy": "Bob"
},]
我想要图表输出,我可以按任何 属性 名称进行分组以进行计数,例如在 'createdBy' 上:
"result": [{
"key": "Bob",
"value": 3,
},{
"key": "Megan",
"value": 1,
},{
"key": "Sam",
"value": 1,
},
我有 JSON 并且需要在绑定到我的图表之前按以下格式对其进行操作。我从下划线尝试了 _groupBy 但无法获得所需的结果。
减少行以计算每个对象的出现次数 createBy
属性。 occurences
将是一个对象,其键是名称(如 Bob1
、Megan
、...),值是出现次数。然后用Object.keys()
循环遍历这个对象,映射到结果:
var rows = [
{ 'createdDate': '3/11/2016', 'createdBy': 'Bob' },
{ 'createdDate': '3/12/2016', 'createdBy': 'Megan' },
{ 'createdDate': '3/12/2016', 'createdBy': 'Bob' },
{ 'createdDate': '3/13/2016', 'createdBy': 'Sam' },
{ 'createdDate': '3/11/2016', 'createdBy': 'Bob' },
];
var occurences = rows.reduce(function (r, row) {
r[row.createdBy] = ++r[row.createdBy] || 1;
return r;
}, {});
var result = Object.keys(occurences).map(function (key) {
return { key: key, value: occurences[key] };
});
console.log(result);
只有一个循环的解决方案。
var rows = [{ createdDate: "3/11/2016", createdBy: "Bob" }, { createdDate: "3/12/2016", createdBy: "Megan" }, { createdDate: "3/12/2016", createdBy: "Bob" }, { createdDate: "3/13/2016", createdBy: "Sam" }, { createdDate: "3/11/2016", createdBy: "Bob" }],
group = function (array) {
var r = [], o = {};
array.forEach(function (a) {
if (!o[a.createdBy]) {
o[a.createdBy] = { key: a.createdBy, value: 0 };
r.push(o[a.createdBy]);
}
o[a.createdBy].value++;
});
return r;
}(rows);
document.write('<pre>' + JSON.stringify(group, 0, 4) + '</pre>');
我有以下 JSON 数据
"rows": [{
"createdDate": "3/11/2016",
"createdBy": "Bob"
},{
"createdDate": "3/12/2016",
"createdBy": "Megan"
},{
"createdDate": "3/12/2016",
"createdBy": "Bob"
},{
"createdDate": "3/13/2016",
"createdBy": "Sam"
},{
"createdDate": "3/11/2016",
"createdBy": "Bob"
},]
我想要图表输出,我可以按任何 属性 名称进行分组以进行计数,例如在 'createdBy' 上:
"result": [{
"key": "Bob",
"value": 3,
},{
"key": "Megan",
"value": 1,
},{
"key": "Sam",
"value": 1,
},
我有 JSON 并且需要在绑定到我的图表之前按以下格式对其进行操作。我从下划线尝试了 _groupBy 但无法获得所需的结果。
减少行以计算每个对象的出现次数 createBy
属性。 occurences
将是一个对象,其键是名称(如 Bob1
、Megan
、...),值是出现次数。然后用Object.keys()
循环遍历这个对象,映射到结果:
var rows = [
{ 'createdDate': '3/11/2016', 'createdBy': 'Bob' },
{ 'createdDate': '3/12/2016', 'createdBy': 'Megan' },
{ 'createdDate': '3/12/2016', 'createdBy': 'Bob' },
{ 'createdDate': '3/13/2016', 'createdBy': 'Sam' },
{ 'createdDate': '3/11/2016', 'createdBy': 'Bob' },
];
var occurences = rows.reduce(function (r, row) {
r[row.createdBy] = ++r[row.createdBy] || 1;
return r;
}, {});
var result = Object.keys(occurences).map(function (key) {
return { key: key, value: occurences[key] };
});
console.log(result);
只有一个循环的解决方案。
var rows = [{ createdDate: "3/11/2016", createdBy: "Bob" }, { createdDate: "3/12/2016", createdBy: "Megan" }, { createdDate: "3/12/2016", createdBy: "Bob" }, { createdDate: "3/13/2016", createdBy: "Sam" }, { createdDate: "3/11/2016", createdBy: "Bob" }],
group = function (array) {
var r = [], o = {};
array.forEach(function (a) {
if (!o[a.createdBy]) {
o[a.createdBy] = { key: a.createdBy, value: 0 };
r.push(o[a.createdBy]);
}
o[a.createdBy].value++;
});
return r;
}(rows);
document.write('<pre>' + JSON.stringify(group, 0, 4) + '</pre>');