Il y a au moins quatre façons de procéder. La meilleure option, qui devrait également être la plus rapide - grâce au moteur RegEx natif -, est placée en haut. jsperf.com est actuellement hors service, sinon je vous fournirais des statistiques de performance.
Mise à jour : Veuillez trouver les tests de performance ici et les exécuter vous-mêmes, afin de contribuer aux résultats de vos performances. Les détails des résultats seront donnés plus tard.
1.
("this is foo bar".match(/o/g)||[]).length
//>2
2.
"this is foo bar".split("o").length-1
//>2
fractionnement non recommandé. Avide de ressources. Alloue de nouvelles instances de 'Array' pour chaque correspondance. N'essayez pas cela pour un fichier de plus de 100 Mo via FileReader. Vous pouvez facilement observer l'utilisation EXACTE des ressources en utilisant Le profileur de Chrome option.
3.
var stringsearch = "o"
,str = "this is foo bar";
for(var count=-1,index=-2; index != -1; count++,index=str.indexOf(stringsearch,index+1) );
//>count:2
4.
recherche d'un seul caractère
var stringsearch = "o"
,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
//>count:2
Mise à jour :
5.
mappage et filtrage des éléments, non recommandé en raison de la préaffectation globale des ressources plutôt que de l'utilisation de "générateurs" pythoniens.
var str = "this is foo bar"
str.split('').map( function(e,i){ if(e === 'o') return i;} )
.filter(Boolean)
//>[9, 10]
[9, 10].length
//>2
Partager : J'ai fait ça Gist avec actuellement 8 méthodes de comptage de caractères, afin que nous puissions directement mettre en commun et partager nos idées - juste pour le plaisir, et peut-être quelques points de repère intéressants :)
https://gist.github.com/2757250