Juan José Beltrán
PreguntaHola compañeros. Tengo una duda:
Hice la función para calcular la moda, y en la consola funciona de maravilla. Pero, intenté recibir un array de un input para que el usuario no tenga que abrir la consola. El problema viene cuando presiono el botón de calcular la moda. Es curioso porque, si lo presiono, funciona perfectamente en la consola. El resultado es el esperado, pero, cuando quiero imprimir la moda en una etiqueta de párrafo en el html, no funciona. Me manda un valor undefined. Así:
Como pueden ver, en la consola el resultado es el esperado, pero en el parrafo destinado a imprimir ese resultado, la variable moda es undefined.
Agradecería mucho su ayuda!
Les dejo mi código:
HTML
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Moda</title> </head> <body> <header> <h1>Moda</h1> </header> <main> <section class="seccion-principal"> <form action="" class="form"> <!-- Ingresar los datos --> <label for="inputModa" class="form__label">Ingresa uno por uno los datos</label> <input type="number" id="inputModa" class="form__input" placeholder="Dato" /> <button type="reset" class="form__button" onclick="agregarNumero()"> Agregar </button> <br> <!-- Moda --> <button type="reset" class="form__button" onclick="onClickCalcularModa()"> Calcular Moda </button> <!-- Texto a aparecer --> <div class="form__texto-aparecer"> <p id="textoAparecer" class="texto-aparecer__p"></p> <p class="texto-aparecer__p"> Nota: Cada vez que necesites una nueva moda con nuevos valores, <br> deberás recargar esta página :] </p> </div> </form> </section> </main> <script src="./modaReducida.js"></script> </body> </html>
JS
// Función para la moda function calcularModa(arreglo = []) { const objetoPrincipal = {}; // Se declara la cuenta como un objeto para luego llenarlo arreglo.map( // .map recorre cada uno de los elementos function (elementoDentroDelObjeto) { // Función anonima if (objetoPrincipal[elementoDentroDelObjeto]) { objetoPrincipal[elementoDentroDelObjeto] += 1; } else { objetoPrincipal[elementoDentroDelObjeto] = 1; } } ); const objetoConvertidoArray = Object.entries(objetoPrincipal).sort( function (elementoA, elementoB) { return elementoA[1] - elementoB[1]; } ); console.log(objetoConvertidoArray); const moda = objetoConvertidoArray[objetoConvertidoArray.length - 1]; console.log("la moda es: " + moda); } // Cierra calcularModa // Arreglo para obtener los datos del input const arreglo = []; // ----> Obtener array por HTML <---- function agregarNumero() { const input = document.getElementById("inputModa"); const nuevoValor = parseInt(input.value); arreglo.push(parseFloat(nuevoValor)); arreglo.sort( function(a,b) { return a - b; } ); console.log(arreglo); } // Botón onClick function onClickCalcularModa () { const modaa = calcularModa(arreglo); const mostrar = document.getElementById("textoAparecer"); mostrar.innerHTML = "La moda es: " + modaa; }
- No presten mucha atención a las anotaciones, las uso para entender mejor
Gracias!
Juan José Beltrán
Muchas gracias Carlos, me fué de mucha ayuda!

Carlos Iván Ochoa Gómez
Hola Confleis, te falta retornar un valor, debajo del console.log retorna la moda
console.log("la moda es: " + moda); return moda;
y solo te faltaría quitar la coma y las veces que se repitió.