JSON按计数分组,输出键值对JSON结果。

6

I have following JSON data

"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数据,需要在绑定到图表之前按以下格式进行操作。 我尝试使用underscore的_groupBy函数,但无法得到期望的结果。

展示你尝试过的代码片段。 - Amit
2个回答

14

通过createBy属性将行减少以计算每个对象的出现次数。 occurences将是一个对象,其键是名称(如Bob1Megan,...),值是出现次数。 然后使用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);

1
一种只使用一个循环的解决方案。

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>');


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接