Existem várias formas de implementar essa função. Eu fiz da seguinte maneira:
1 function vezesletraaparece(frase, letra){
2 let array = frase.split('');
3 let contador = 0;
4 array.forEach(function(elemento){
5 if (elemento.toLowerCase() === letra.toLowerCase()){
6 contador += 1;
7 }
8 })
9 return contador;
10 }
Explicação:
Linha 2: Usei o método split() para para transformar uma lista de substring que retorna um array.
Linha 3: Criei uma variável contador para armazenar a quantidade de vezes que a letra aparece na frase.
Linha 4: Usei o método forEach() para executar uma função para cada elemento do array (para cada letra).
Linha 5: Dentro da função do forEach(), fiz um if para comparar a letra passada por parâmetro com o elemento do array (que é uma letra da frase).
Ainda na linha 5, usei o método toLowerCase(), que passa a string para minúsculo. Fiz isso para garantir que o código não diferencie maiúsculo de minúsculo, pois vai tratar todas as letras como minúsculas.
Linha 6: incremento a variável contador com mais 1, caso a letra seja igual ao elemento.
Linha 9: retorno o contador, que terá armazenado a quantidade de vezes que a letra passada por parâmentro foi igual ao elemento.
console.log(vezesletraaparece("Vamos aprender JavaScript", "s"));
Ao executar a linha acima, o resultado apresentado no console será 2.