Contar las letras que aparecen en un string con Javascript

Si queremos contar las letras que aparecen en una cadena de texto con Javascript podemos utilizar la siguiente función:

function contarLetras(letras) {
    var objeto = {}; 
    for(var i in letras){
        objeto[letras[i]] = ( objeto[letras[i]] || 0 ) + 1; // Incrementamos el valor si el elemento ya existe
    }
    return objeto;
}

Podemos verlo funcionando y probar cosas en:


Si no quisiéramos diferenciar las minúsculas de las mayúsculas deberíamos añadir «.toLowerCase()» :

function contarLetras(letras) {
    var objeto = {}; 
    for(var i in letras){
        objeto[letras[i].toLowerCase()] = ( objeto[letras[i]] || 0 ) + 1; // Incrementamos el valor si el elemento ya existe
    }
    return objeto;
}

Si no quisiésemos contar los espacios podemos hacerlo de varias maneras, por ejemplo, podríamos eliminar todos los espacios antes de empezar a recorrer la frase con

.replace(/ /g,'');

Nos quedaría:

function contarLetras(letras) {
    letras = letras.replace(/ /g,'');
    var objeto = {}; 
    for(var i in letras){
        objeto[letras[i].toLowerCase()] = ( objeto[letras[i]] || 0 ) + 1; // Incrementamos el valor si el elemento ya existe
    }
    return objeto;
}


Un ejemplo de uso de la función sería:

contarLetras('Contamos las letras  de la cadena de texto')

En el primer ejemplo los devolvería el siguiente objeto:

{"C":1,"o":3,"n":2,"t":4,"a":6,"m":1,"s":3," ":8,"l":3,"e":5,"r":1,"d":3,"c":1,"x":1}

Saludosss!


Tu opinión es importante para mi, ¿Te ha resultado útil este artículo?

4 Comments

Sonia

Buenas Kike,

¿Podrías echarme una mano? Mi código se basa en lo que tú has hecho, pero no me funciona. ¿Podrías echarle un vistazo? El ejercicio pide que el usuario introduzca una frase, cuente los caracteres y devuelva el número de veces que se repite cada uno. La devolución del número de caracteres lo hace bien pero no me proporciona el objeto donde aparece cada carácter con su número de repeticiones.

function funcioncontadora(frase){
var frase;
frase=prompt(«Introduce una frase: «);
frase=frase.replace(/ /g, «»); //Eliminamos los espacios de la frase
caracteres=frase.length;
alert(«Tu frase tiene : » +caracteres+ » caracteres» );

var caracteresagrupados = frase.toLowerCase().split(«»).sort();
//Almacenamos en el vector los caracteres agrupados y ordenados

var contletras = {}; //Definimos un objeto donde se almacene cada letra de la frase con el numero de veces que aparece

for(var i in caracteresagrupados) {
contletras[caracteresagrupados[i]] = (contletras[caracteresagrupados[i]] || 0 ) + 1;
}
return contletras;
}
alert(funcioncontadora());

Muchas gracias!

Reply
kike

Hola Sonia!!

Gracias por escribir, para que no te muestre la alert con [object Object] deberías devolver el return contletras en texto, para ello puedes hacerlo con return return JSON.stringify(contletras);.

Te copio tu script con el return modificado (solo he modificado el return):

function funcioncontadora(frase){
    var frase;
    frase=prompt("Introduce una frase: ");
    frase=frase.replace(/ /g, ""); //Eliminamos los espacios de la frase
    caracteres=frase.length;
    alert("Tu frase tiene : " +caracteres+ " caracteres" );

    var caracteresagrupados = frase.toLowerCase().split("").sort();
    //Almacenamos en el vector los caracteres agrupados y ordenados

    var contletras = {}; //Definimos un objeto donde se almacene cada letra de la frase con el numero de veces que aparece

    for(var i in caracteresagrupados) {
        contletras[caracteresagrupados[i]] = (contletras[caracteresagrupados[i]] || 0 ) + 1;
    }
    return JSON.stringify(contletras);
}
alert(funcioncontadora());

Saludosss!!

Kike

Reply

Responder a kike Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*