Zählen der Häufigkeit von Zeichen in einer Zeichenfolge mit Javascript

8

Ich muss eine Art Schleife schreiben, die die Häufigkeit jedes Buchstabens in einer Zeichenfolge zählt.

Zum Beispiel: "aabsssd"

Ausgabe: a: 2, b: 1, s: 3, d: 1

Sie möchten auch dasselbe Zeichen wie den Eigenschaftsnamen im Objekt zuordnen. Irgendeine gute Idee, wie man das macht?

Ich bin nicht sicher, wie es geht.

Hier bin ich so weit:

%Vor%     
Samrat 04.09.2013, 17:02
quelle

9 Antworten

15

Hier geht's:

%Vor%     
Jonathan Crowe 04.09.2013, 17:13
quelle
5

Eine andere Lösung:

%Vor%     
sarunast 04.04.2014 11:59
quelle
4

einige ES6-Syntax mit reduzieren:

%Vor%     
russiansummer 06.03.2017 22:41
quelle
1

Der einfachste Weg, ein Worthistogramm zu erhalten, besteht darin, reduce zu verwenden, um Buchstaben zu durchlaufen und ein neues Objekt zu erstellen, das Buchstaben als Schlüssel und Häufigkeiten als Werte enthält.

%Vor%
    
vitkon 11.12.2016 13:34
quelle
0
%Vor%     
Andy 04.09.2013 17:20
quelle
0

Hier ist eine weitere Option, die underscore.js verwendet:

%Vor%

charCount('aaabbbbdd') gibt Object {a: 3, b: 4, d: 2}

aus     
colllin 04.09.2013 17:19
quelle
0

%Vor%
    
Erick Wendel 15.09.2017 18:13
quelle
0

Hier ist ein anderer Weg:

%Vor%

z.B. freqMap ("MaMaMia") gibt das Objekt {M: 3, a: 3, i: 1}

zurück

Diese Methode nutzt die Tatsache, dass in Javascript bitweise nicht auf "undefiniert" -1 ergibt (während "undefined + 1" NaN ergibt). Also, - ~ undefined ist 1, - ~ 1 ist 2, - ~ 2 ist 3 usw.

Wir können also über die Zeichen der Zeichenfolge iterieren und einfach freq [c] ohne "if" erhöhen. Wenn wir das erste Mal auf ein Zeichen c stoßen, ist freq [c] undefiniert, also setzen wir es auf - ~ freq [c], was 1. Wenn wir dann wieder auf c treffen, setzen wir freq [c] erneut auf - ~ freq [c], was nun 2 ist, usw.

Einfach, elegant, prägnant.

    
Yoni Rabinovitch 29.11.2017 07:00
quelle
0

eine schlankere, funktionale Lösung:

unter Verwendung von ES6-Pfeilen & amp; & amp; Logische Operatoren:

%Vor%

Erklärt

  • Teilen Sie string in ein Zeichenfeld.
    • und dann füttern Sie es in eine reduzieren -Methode (mit method.chaiing () ).
  • Wenn char bereits bei countDict angemeldet ist, fügen Sie 1 hinzu.
    • oder Wenn das Zeichen nicht in countDict gefunden wurde, setzen Sie es auf 1.
  • gibt neue Werte zurück bis zu reduziert das Akkumulator-Objekt
  • Hinweis: Vergessen Sie nicht, das dritte Argument von .reduce () einzufügen: In diesem Fall ist es ein {} ( Objektliteral), das zur Initialisierung des Objekts freqDict dient.

Weitere Informationen finden Sie unter Instanzen von Werten in einem Objekt zählen hier auf halbem Weg: MDN Reduzieren
Weitere Informationen zur Verwendung von logischen Operatoren finden Sie hier: MDN Logische Operatoren

Wenn Sie einen Ausdruck als Funktionsausdruck verwenden und weitere Klammern für einen anderen Pfeil ausgeben möchten, können Sie wie folgt schreiben:

%Vor%     
Jens Leerssen 06.02.2018 05:09
quelle

Tags und Links