使用.countBy汇总数据

时间:2012-10-07 20:34:46

标签: underscore.js

我正在尝试使用_.countBy()中的UnderscoreJS方法来总结以下数据。我有以下数据:

var data =
[
    {"id":"338b79f07dfe8b3877b3aa41a5bb8a58","value":{"country":"United States"}},
    {"id":"338b79f07dfe8b3877b3aa41a5bb983e","value":{"country":"Norway"}},
    {"id":"338b79f07dfe8b3877b3aa41a5ddfefe","value":{"country":"Hungary"}},
    {"id":"338b79f07dfe8b3877b3aa41a5fe29d7","value":{"country":"United States"}},
    {"id":"b6ed02fb38d6506d7371c419751e8a14","value":{"country":"Germany"}},
    {"id":"b6ed02fb38d6506d7371c419753e20b6","value":{"country":"Hungary"}},
    {"id":"b6ed02fb38d6506d7371c419755f34ad","value":{"country":"United States"}},
    {"id":"b6ed02fb38d6506d7371c419755f3e17","value":{"country":"Germany"}},
    {"id":"338b79f07dfe8b3877b3aa41a506082f","value":{"country":"United Kingdom"}},
    {"id":"9366afb036bf8b63c9f45379bbe29509","value":{"country":"United Kingdom"}}
]

我想这样总结一下:

{ 
    United_States: 3,
    Norway: 1,
    Hungary: 2,
    Germany: 2,
    United_Kingdom: 2
}

我如何将其传递给Underscore.js提供的_.countBy()方法?

3 个答案:

答案 0 :(得分:15)

试试这个:

var data =
[
    {"id":"338b79f07dfe8b3877b3aa41a5bb8a58","value":{"country":"United States"}},
    {"id":"338b79f07dfe8b3877b3aa41a5bb983e","value":{"country":"Norway"}},
    {"id":"338b79f07dfe8b3877b3aa41a5ddfefe","value":{"country":"Hungary"}},
    {"id":"338b79f07dfe8b3877b3aa41a5fe29d7","value":{"country":"United States"}},
    {"id":"b6ed02fb38d6506d7371c419751e8a14","value":{"country":"Germany"}},
    {"id":"b6ed02fb38d6506d7371c419753e20b6","value":{"country":"Hungary"}},
    {"id":"b6ed02fb38d6506d7371c419755f34ad","value":{"country":"United States"}},
    {"id":"b6ed02fb38d6506d7371c419755f3e17","value":{"country":"Germany"}},
    {"id":"338b79f07dfe8b3877b3aa41a506082f","value":{"country":"United Kingdom"}},
    {"id":"9366afb036bf8b63c9f45379bbe29509","value":{"country":"United Kingdom"}}
];

var countData = _.countBy(data, function(obj){
    return obj.value.country.replace(" ", "_");
}); 

console.log(countData);

JSFiddle:http://jsfiddle.net/hyDv7/1/

答案 1 :(得分:1)

“清洁js”:

var t = {};
for(var i = 0, l = data.length; i < l; i++){
    t[data[i].value.country] = !t[data[i].value.country] ? 1 : t[data[i].value.country] + 1;
}

结果:

Germany 2
Hungary 2
Norway 1
United Kingdom 2
United States 3

答案 2 :(得分:0)

使用reduce

的1个班轮
var countData = data.reduce(function (a, x) {a[x.country] = (a[x.country] ? a[x.country] : 0) + 1; return a;}, {});