Існує як мінімум чотири способи. Найкращий варіант, який також повинен бути найшвидшим - приєднавшись до рідного двигуна RegEx -, розміщується вгорі. jsperf.com наразі не працює, інакше я б надав вам статистику.
Оновлення . Будь ласка, знайдіть тут тести на ефективністьта запускайте їх самі, щоб сприяти результатам роботи. Специфіка результатів буде наведена пізніше.
1.
("this is foo bar".match(/o/g)||[]).length
//>2
2.
"this is foo bar".split("o").length-1
//>2
розділити не рекомендується. Ресурс голодний. Виділяє нові екземпляри "масиву" для кожного матчу. Не спробуйте цього для файлу> 100 Мб через FileReader. Ви можете легко спостерігати за точним використанням ресурсів, використовуючи опцію профіля 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.
пошук одного персонажа
var stringsearch = "o"
,str = "this is foo bar";
for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
//>count:2
Оновлення:
5.
відображення та фільтрування елементів, не рекомендується через загальне попереднє розміщення ресурсів, а не використання пітонічних "генераторів"
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
Поділіться:
я створив цю суть , наразі 8 методів підрахунку символів, тому ми можемо безпосередньо об'єднатись та поділитися своїми ідеями - просто для розваги та, можливо, деяких цікавих орієнтирів :)
https://gist.github.com/2757250