Wizerol: ¿Por qué colocaste el código de la invocación de la función dentro de la función? No debiste de hacerlo. Por otra parte, al darle clic al
<textarea>
, no mostrarás nada ya que la función retorna un objeto, mas no lo imprime. Eso ya te toca hacerlo o bien podrías modificar la función:
Código HTML:
Ver original<textarea onclick = "array_count_values(this.value)">Este año fue muy bueno, excepto por dos acontecimientos muy dolorosos: la muerte de mi padre y la desaparición de mi compañera y amiga: mi gatita Ginny
</textarea>
Código Javascript
:
Ver originalfunction array_count_values(texto) {
var array = texto.split(/[^a-zñáéíóúÁÉÍÓÚÑ\d]+/gi);
var tmp_arr = {};
key = '';
t = '';
var __getType = function(obj) {
var t = typeof obj;
t = t.toLowerCase();
if (t === 'object') {
t = 'array';
}
return t;
};
var __countValue = function(value) {
switch (typeof value) {
case 'number':
if (Math.floor(value) !== value) {
return;
}
case 'string':
if (value in this && this.hasOwnProperty(value)) {
++this[value];
} else {
this[value] = 1;
}
}
};
t = __getType(array);
if (t === 'array') {
for (key in array) {
if (array.hasOwnProperty(key)) {
__countValue.call(tmp_arr, array[key]);
}
}
}
var valores = [];
for (var i in tmp_arr) valores.push("La palabra '" + i + "' se repite " + tmp_arr[i] + " vez/veces");
alert(valores.join("\n") + "\n\nHay " + (texto.match(/\s+/g).length) + " espacios" + "\nHay " + array.length + " palabras");
}
DEMO
Saludos