Ci sono almeno quattro modi. L'opzione migliore, che dovrebbe anche essere la più veloce, il motore nativo RegEx, è posizionata in alto. jsperf.com è attualmente inattivo, altrimenti ti fornirei le statistiche sulle prestazioni.
Aggiornamento : trova qui i test delle prestazionied eseguili tu stesso, in modo da contribuire ai risultati delle tue prestazioni. Le specifiche dei risultati verranno fornite in seguito.
1.
("this is foo bar".match(/o/g)||[]).length
//>2
2.
"this is foo bar".split("o").length-1
//>2
divisione non consigliata. Fame di risorse. Alloca nuove istanze di 'Array' per ogni partita. Non provarlo per un file> 100 MB tramite FileReader. Puoi effettivamente osservare facilmente l'utilizzo delle risorse EXACT usando l' opzione del profiler di 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.
alla ricerca di un singolo personaggio
var stringsearch = "o"
,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
//>count:2
Aggiornare:
5.
mappatura e filtro degli elementi, non raccomandato a causa della sua preallocazione globale delle risorse piuttosto che usando i "generatori" di Pythonian
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
Condividi:
ho fatto questa idea , con attualmente 8 metodi di conteggio dei personaggi, in modo da poter raggruppare e condividere direttamente le nostre idee - solo per divertimento e forse alcuni benchmark interessanti :)
https://gist.github.com/2757250