Il y a au moins quatre façons. 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 en panne, sinon je vous fournirais des statistiques de performances.
Mise à jour : Veuillez trouver les tests de performances ici et exécutez-les vous-même, afin de contribuer à vos résultats de performances. Les détails des résultats seront donnés ultérieurement.
1.
("this is foo bar".match(/o/g)||[]).length
//>2
2.
"this is foo bar".split("o").length-1
//>2
split non recommandé. Affamé de ressources. Alloue de nouvelles instances de «tableau» pour chaque correspondance. N'essayez pas cela pour un fichier> 100 Mo via FileReader. Vous pouvez en fait facilement observer l'utilisation des ressources EXACT en utilisant l' option de profileur de Chrome .
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, déconseillés en raison de la préallocation globale des ressources plutôt que d'utiliser des «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 créé cet aperçu , 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 repères intéressants :)
https://gist.github.com/2757250