Einzelne Buchstaben in Javascript zählen?

2 Antworten

Lege ein Array an und laufe mit einer Schleife über die Eingabe, die du zuvor am besten in Kleinbuchstaben umwandeln lässt (sofern Groß- und Kleinbuchstaben gleich gewertet werden sollen). Wenn das Array bereits einen Key besitzt, der gleich dem aktuellen Buchstaben ist, dann erhöhst du dessen Wert. Ansonsten legst du diesen Key an und setzt den Wert auf 1.

Das dürfte dann so in etwa aussehen:

input = input.toLowerCase();
let letters = [];

for (let index = 0; index < input.length; ++index) {
  let currentLetter = input.charAt(index);

  if (!letters[currentLetter]) {
    letters[currentLetter] = 1;
    continue;
  }

  ++letters[currentLetter];
}

verreisterNutzer  13.06.2018, 23:34

Statt eines Arrays ist hier eher die Verwendung eines Objects zu empfehlen, da diese für Key-Value-Paare vorgesehen sind.

let letters = {};

Die Namen sollten alle in einem Array gespeichert werden. Dann kann man durch das Array gehen und für jeden Buchstaben die Häufigkeit bestimmen. Die Häufigkeit kann in einem Object gespeichert werden. Dieses konstruiert man zunächst folgendermaßen:

var names = ['Name 1', 'Name 2', 'Name 3', /* ... */];
var letters = {};
for (let charCode = 97; charCode <= 122; ++charCode) {
  let char = String.fromCharCode(charCode);
  letters[char] = 0;
}

Nun kann die Häufigkeit folgendermaßen ermittelt werden:

for (let i = 0; i < names.length; ++i) {
  for (let str = names[i].toLowerCase(), j = 0; j < str.length; ++j) {
    let charCode = str.charCodeAt(j);
    if (charCode >= 97 && charCode <= 122) {
      ++letters[str.charAt(j)];
    }
  }
}

Die äußere Schleife durchläuft dabei jeden String, die innere jeden einzelnen Buchstaben des Strings. Für jeden Buchstaben wird anhand des Char-Codes ermittelt, ob es ein Buchstabe ist. Davor werden noch alle Großbuchstaben in Kleinbuchstaben umgewandelt. Für jeden Buchstaben wird der Wert des jeweiligen Attributs des Objects um eins erhöht.