Si ya estás usando navegadores modernos puedes usar el método
map, luego de convertir el texto en array y recorrer cada palabra guardando en otro array donde va el conteo de cada palabra repetida. Si quieres compatibilidad para navegadores antiguos puedes usar map de jQuery.
Código Javascript
:
Ver originalfunction contarPalabras(s){
var r = {}
s = s.split(/\s+/).map(function(a){ !r[a] && (r[a] = 0); r[a]++ })
return function(what){
return {"palabras": s.length, "espacios": s.length - 1, "repeticiones": r}[what]
}
}
var result = contarPalabras("Hola me llamo Hola")
result("palabras") //4
result("espacios") //3
result("repeticiones") //{Hola: 2, me: 1, llamo: 1}
result("repeticiones")["Hola"] //2