2012-10-13 4 views
28

Mögliche Duplizieren:
array_count_values for javascript insteadJavaScript Gruppe von Array

Lassen Sie uns sagen, ich habe einfach JavaScript-Array wie folgt aus:

var array = ['Car', 'Car', 'Truck', 'Boat', 'Truck']; 

ich zu einer Gruppe und Zählung wollen von Jeder würde also eine Schlüssel/Wert-Karte von

0 erwarten
{ 
    Car : 2, 
    Truck : 2, 
    Boat : 1 
} 
+3

Sie etwas versucht haben, die nicht funktioniert? – haynar

+3

Ich glaube nicht, dass dies ein Duplikat ist. Diese Frage ist weit generischer als die von Php. –

+1

Ich glaube nicht, dass dies auch ein Duplikat ist. Ich bin auf der Suche nach einer Frage und Antwort über Javascript, ich verstehe nicht die andere Frage, die nur PHP-Code auflistet. – Ande

Antwort

49
var arr = [ 'Car', 'Car', 'Truck', 'Boat', 'Truck' ]; 
var hist = {}; 
arr.map(function (a) { if (a in hist) hist[a] ++; else hist[a] = 1; }); 
console.log(hist); 

Ergebnisse in

{ Car: 2, Truck: 2, Boat: 1 } 

Dies funktioniert auch: jeder

hist = arr.reduce(function (prev, item) { 
    if (item in prev) prev[item] ++; 
    else prev[item] = 1; 
    return prev; 
}, {}); 
+0

erste Lösung funktioniert nicht für Werte, die nicht mit Variablennamen wie GUID oder ganze Zahlen kompatibel sind, obwohl es groß ist –

+7

Nur eine Anmerkung, nach https://developer.mozilla.org/en-US/docs/Web/ JavaScript/Referenz/Global_Objects/Array/Map-Map erstellt eine Kopie des Arrays. In deinem Fall verwendest du diese Kopie nicht einmal, also ist es besser, es so zu machen: arr.forEach (Funktion (a) {if (a in hist) hist [a] ++; sonst hist [a] = 1;}) weil forEach keine neue Kopie erstellen wird – pretobomba

+1

Wenn Sie Undescore anstelle von 'arr.reduce' verwenden, können Sie auch _countBy (list, iterator) http://underscorejs.org/#countBy – Ande

3

Sie können durch jeden Index Schleife und es in einem Wörterbuch speichern und erhöht werden, wenn der Schlüssel gefunden .

count = {}; 
for(a in array){ 
    if(count[array[a]])count[array[a]]++; 
    else count[array[a]]=1; 
} 

Ausgang wird sein:

Boat: 1 
Car: 2 
Truck: 2