Como poderia sumar os dígitos do resultado de uma function com outra function

Tenho um método que converte as letras de uma palavra a numeros:

                function convertLetras(palabra){
             	switch(palabra){
             		case "a": return 1;
             		break;
                            
                            
                            default: return 'unknown';
             			}
             		}

Tenho a funcão que guarda na var “palabra” o que o usuario envia, converte essas letras a numeros e consegue sumar um a um, desta forma:
var sumaL;

 		function sumLetras(sumaL){
 			var palabra = document.getElementById('palabra').value;

 			sumaL = 0;

 			for (var i = 0; i < palabra.length; i++) {
 				sumaL = sumaL + convertLetras(palabra.charAt(i));
 			}	
 			document.write( sumaL );
 		}

Eu preciso de um metodo que consiga sumar os digitos de sumaL
function sumDigitosDeSumaL(){}

Este é o button que estou usando:

         			<button id="meuBotao" onclick="sumDigitosDeSumL()">Enviar</button>

Se alguém poderia me ajudar, agradeceria muito!

Se o valor de sumaL for “333”, vc quer o resultado de 3 + 3 + 3, correto? Se for isso, daria pra fazer assim:

let sumaL = '123';

function sumDigitosDeSumL() {
  return [...sumaL].reduce((acc, n) => +n + acc, 0)
}

O único problema é aquele “unknown” que vc retorna no default em convertLetras que pode atrapalhar a soma e precisa ser tratado. Uma sugestão é, já que seu programa não reconhecerá certos caracteres, vc podia retornar o valor 0 pra eles, assim não atrapalharia a função de soma e não influenciaria no resultado final justamente por valerem 0.

2 curtidas

Olá, obrigado pela resposta, só 2 perguntas:

  1. esse
    let sumaL = '123';
    teria que ser colocado como variável mesmo fora da function sumDigitosDeSumL?
    Mas ela já tem um valor em números que é gerado pela função sumLetras.

  2. Deixando no código sua idéia de colocar o 0 como return default na função convertLetras, como teria que proceder para conseguir o objetivo?
    Eu tentei colocando 0 como return default e fazendo isto:

     let sumaL;
     function sumDigitosDeSumL() {
         return [sumaL].reduce((acc, n) => +n + acc, 0);
     }
    

E no meu button:

<button id="meuBotao" onclick="sumDigitosDeSumL()">Enviar</button>

Mas não funcionou :frowning:

Acabei não levando em consideração que sumaL é um número e não uma string. Sendo assim, vc precisaria converter pra string antes de a minha solução funcionar, ficaria assim:

function sumDigitosDeSumL(sum) {
  return [...String(sum)].reduce((acc, n) => +n + acc, 0);
}

O código completo seria assim:

<input type="text" id="palabra">
<button id="meuBotao" onclick="sumLetras()">Enviar</button>
<div id="convertido"></div>
<div id="somado"></div>

<script>
  function convertLetras(palabra) {
    switch (palabra) {
      case "a":
        return 123;
      case "b":
        return 456;
      case "c":
        return 789;
      default:
        return 0;
    }
  }

  function sumLetras() {
    let palabra = document.getElementById("palabra").value;
    let sumaL = 0;
    for (let i = 0; i < palabra.length; i++) {
      sumaL = sumaL + convertLetras(palabra.charAt(i));
    }

    document.getElementById("convertido").innerText = sumaL;
    document.getElementById("somado").innerText = sumDigitosDeSumL(sumaL)
  }

  function sumDigitosDeSumL(sum) {
    return [...String(sum)].reduce((acc, n) => +n + acc, 0);
  }  
</script>
1 curtida

Muito obrigado @wldomiciano.