fréquence de comptage de caractères dans une chaîne de caractères à l'aide de javascript
J'ai besoin d'écrire une sorte de boucle qui peut compter la fréquence de chaque lettre dans une chaîne de caractères.
Par exemple: "aabsssd"
de sortie:: 2, b:1, s:3, d:1
Voulons aussi la carte même caractère que le nom de propriété dans l'objet. Toute bonne idée de comment faire cela?
Je ne suis pas sûr de savoir comment faire.
C'est là où je suis jusqu'à présent:
var arr = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"];
function counter(x) {
var count=0, temp = [];
x = x.split('');
console.log(x);
for(var i=0, len = x.length; i < len; i++) {
if(x[i] == "a") {
count++;
}
}
return count;
}
var a = "aabbddd";
console.log(counter(a));
Avez-vous essayé quelque chose? Pourriez-vous nous donner un exemple de votre code?
possible en double stackoverflow.com/questions/4009756/...
S'il vous plaît montrer votre tente de résoudre le problème, et puis les réponses directement critiquer le code que vous fournissez.
J'essaie ici: jsfiddle.net/creativevilla/wjD2r
Ses pas doublon. Je suis en train d'essayer d'obtenir de l'occurrence de chaque lettre.
possible en double stackoverflow.com/questions/4009756/...
S'il vous plaît montrer votre tente de résoudre le problème, et puis les réponses directement critiquer le code que vous fournissez.
J'essaie ici: jsfiddle.net/creativevilla/wjD2r
Ses pas doublon. Je suis en train d'essayer d'obtenir de l'occurrence de chaque lettre.
OriginalL'auteur Samrat | 2013-09-04
Vous devez vous connecter pour publier un commentaire.
Ici, vous allez:
Quelqu'un peut-il expliquer comment l' if (freq[personnage]) cela fonctionne dans le code ci-dessus. Il a parfaitement résoudre mon problème. J'ai utilisé le débogueur de trouver comment il fonctionne. Mais toujours pas à obtenir ce qui est la logique derrière cela. Merci
En javascript un
undefined
la valeur correspond à la valeur false. En cochantif(freq[character])
vous de vérifier si la valeur defreq[character]
est falsey (ie:undefined
, 0,null
, etc.). Depuis que nous avons initialiser la valeur d'un character à1
que si l'instruction ne jamais être saisi si le personnage a été rencontrées et ont compté auparavant, sinon nous l'initialiserOriginalL'auteur Jonathan Crowe
certains ES6 syntaxe avec réduction:
OriginalL'auteur russiansummer
Une autre solution:
OriginalL'auteur sarunast
OriginalL'auteur Andy
Voici une autre option à l'aide de underscore.js:
charCount('aaabbbbdd')
sortiesObject {a: 3, b: 4, d: 2}
OriginalL'auteur colllin
OriginalL'auteur SERGEY VOLYNKIN
Une Autre Solution
OriginalL'auteur bajran
Voici une autre façon:
Ou, si vous préférez une boucle "for":
par exemple freqMap("MaMaMia") renvoie l'Objet{M : 3 : 3, i : 1}
Cette méthode tire parti du fait que dans le javascript, not au niveau du bit sur "undefined" donne -1, (alors que les "undefined+1" donne NaN).
Ainsi, -~undefined est 1, -~1 est 2, -~2 3 etc.
Nous pouvons donc effectuer une itération sur les caractères de la chaîne, et il suffit d'incrémenter freq[c], sans "si". La première fois que nous rencontrons un personnage c, freq[c] ne sera pas défini, donc nous l'avons créé à -~freq[c] qui est de 1. Si par la suite nous avons rencontre c encore une fois, nous avons de nouveau set freq[c]- ~freq[c], qui va maintenant être de 2, etc.
Simple, élégant, concis.
OriginalL'auteur Yoni Rabinovitch
OriginalL'auteur Aaron