O enunciado não deixa claro como exatamente a função vai ser usada no programa, então partiremos do princípio que ela irá retornar um valor. Pra mim, a forma mais direta de se fazer isso seria com o método split()
que o Javascript oferece para strings. O método encontra todas as vezes que uma substring oferecida como argumento é encontrada, e fatia a string em seções antes e depois de cada string, juntando todas as seções numa array. Por exemplo, "javascript ascii".split("asc")
retornaria ["jav","ript ","ii"]
. O bom do método para o nosso caso é que ele também oferece fatias vazias se a substring se encontra nas extremidades da string ou duas ocorrências se encontram adjacentes., o que nos dá confiança quanto à quantidade de elementos na array resultante. Por exemplo, "paralelepípedo".split("le")
retornará ["para","","pípedo]
e "bom-bom".split("bom")
retorna ["","-",""]
.
O código ficaria assim:
function vezesLetraAparece(frase, string) {
return (frase.split("string")).length() - 1;
}
Algumas considerações adicionais podem ser feitas: o método .split()
diferencia letras maiúsculas e minúsculas, então se você estiver esperando uma frase com letras maiúsculas, seria interessante aplicar o método toLowerCase()
pra passar tudo para minúsculas. Outra questão é se é ou não permitido que a string que você quer contar na frase contenha mais de um caractere, já que o enunciado sugere que você está procurando conferir única letra; ademais, há a possibilidade de a função receber coisas como números, símbolos, e tudo o mais (seria fácil conferir isso via RegExp, mas parece fora do escopo da questão, então não vamos levar isso em questão).
Juntando essas considerações, talvez seu código fique mais parecido com isso:
function vezesLetraAparece(frase, string) {
if(string.length > 1) {
console.warn("Você inseriu mais de uma letra!");
}
return ((frase.toLowerCase()).split("string")).length() - 1;
}
Ah, e no caso de você não tiver acesso à função split()
(talvez seu professor ainda não tenha ensinado), o que eu faria seria algo do tipo:
function vezesLetraAparece(frase, letra) {
let contagem = 0;
for(let i=0; i<frase.length; i++) {
if(frase[i] === letra) contagem++;
}
return contagem;
}
Ainda há algumas outras formas de se resolver o problema, mas acho que isso já é o bastante, não é? Espero ter ajudado!