[ Foro de Javascript ]

Problemas con Consola

07-Aug-2021 02:52
Invitado (Joao)
1 Respuestas

porque al ejecutar mi codigo console.log(sumar(string, canciones)) y console.log(sumar(numeros, x))se suman las respuestas de la console.log anterior?
este es mi codigo:
const string = true;
const numeros = false;

let sumaStrings = '';
let sumaNumeros = 0;

const array4 = ['Lunes ', 'Martes ', 'Miercoles ', 'Jueves ', 'Viernes ', 'Sabado ', 'Domingo'];
const array3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 ];
const array = [1, 2, 3, 4, 5, 6, 7];
const array2 = [2, 4, 6, 8, 10];
const canciones = ['Leave the Door open, ', 'Chunky, ', 'Asi es la vida, ', 'Devuelveme a mi chica, ', 'Levitating, '];
const x = [10, 20, 30, 43, 45 ];

function sumar(TipoDeSuma, a) {
 if (TipoDeSuma === string) {
   for (let i = 0; i < a.length; i += 1) {
     sumaStrings += a[i];
   }
   return (`${sumaStrings}`);
 // eslint-disable-next-line no-else-return
 } else if (TipoDeSuma === numeros) {
   for (let i = 0; i < a.length; i += 1) {
     sumaNumeros += a[i];
   }
   return (`numeros -> ${sumaNumeros}`);
 } else {
   return 'identifique el tipo de variable';
 }
}

console.log(sumar(numeros, array));
// 28
console.log(sumar(numeros, array2));
// 58
console.log(sumar(numeros, array3));
// 163
console.log(sumar(numeros, x));
// 148
console.log(sumar(string, array4));
// Lunes Martes Miercoles Jueves Viernes Sabado Domingo
console.log(sumar(string, canciones));
// Leave the Door open, Chunky, Asi es la vida, Devuelveme a mi chica, Levitating


17-Aug-2021 16:45
Luis Torres (+18)

El problema está en la inicialización de las variables 'sumaNumeros' y 'sumaStrings',  estas deben ser inicializadas dentro de la función, porque allí donde están ahora (variables globales) sólo arrancarán desde cero cuando se ejecute la función 'sumar' por primera vez; para la segunda vez tanto 'sumaNumeros', como 'sumaStrings' tendrán almacenados los valores de la última ejecución y se acumularán a los nuevos.

Saludos.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)