2012-10-07 3 views
6

Ich versuche herauszufinden, wie ich die folgenden Daten mit der _.countBy() Methode in UnderscoreJS zusammenfassen kann. Ich habe folgende Daten:Zusammenfassen von Daten mit .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"}} 
] 

Ich möchte es so zusammenfassen:

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

Wie würde ich dies in die _.countBy() Methode von Underscore.js bereitgestellt passieren?

+0

Als Nebenwirkung: Versuchen Sie, ein paar zu akzeptieren mehr von den Antworten, die du bekommen hast zehn. Es ist eine nette Angewohnheit, hineinzugehen. – Tomalak

+0

OK - Also, wo kann ich eine Antwort akzeptieren? Ich sehe nirgends eine Option. – user1513388

+0

OK Es gefunden. Vielen Dank! – user1513388

Antwort

13

Versuchen Sie folgendes:

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

perfekt, das hat funktioniert! Aus Interesse, was der obj.value.signature_algorithm.replace ("", "_"); Linie tun? – user1513388

+0

Es ersetzt die Leerzeichen in Ländername durch Unterstriche, so dass die Schlüssel gültig sind. (obwohl nicht genau erforderlich :)) –

+0

Was ist der beste Weg, um dann die Werte von countData in eine Webseite hinzuzufügen? –

1

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

Ergebnis:

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