2012-10-07 14 views
6

Estoy tratando de resolver cómo puedo resumir los siguientes datos usando el método _.countBy() en UnderscoreJS. Tengo los siguientes datos:Resumir datos usando .countBy

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"}} 
] 

me gustaría resumir así:

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

¿cómo iba a pasar esto en el método proporcionado por _.countBy() Underscore.js?

+0

Dicho sea de paso: Trate de aceptar unos pocos más de las respuestas que tienes diez. Es un buen hábito para entrar. – Tomalak

+0

OK - Entonces, ¿dónde puedo aceptar una respuesta? No veo una opción en ningún lado. – user1513388

+0

OK Lo encontré. ¡Gracias! – user1513388

Respuesta

13

Prueba esto:

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/

+0

perfecto que funcionó! Fuera de interés, ¿qué hace el obj.value.signature_algorithm.replace ("", "_"); línea hacer? – user1513388

+0

está reemplazando los espacios en el nombre del país con guiones bajos, para que las claves sean válidas. (aunque no se requiere exactamente :)) –

+0

¿Cuál es la mejor manera de agregar los valores de countData a una página web? –

1

"js limpias":

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; 
} 

Resultado:

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