Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

121
Visualizações
Operación matemática con signo dinámico

Quiero hacer una tarea matemática aleatoria con un signo de operación matemática aleatoria en el medio.

Los números aleatorios están bien. lo hago con:

 function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min)) + min; }

y guarde este retorno en var number1 y number2

Ahora el problema.

 const mathOperationList = ['+', '-', '*', '/']; function getRandomOperation() { var randomMathOperation = mathOperationList[Math.floor(Math.random() * mathOperationList.length)]; return randomMathOperation; } var mathOperation = getRandomOperation(); console.log("What is "+number1 + " "+mathOperation+" "+number2 +"?"); mathResult = number1 +mathOperation+ number2; console.log(mathResult)

La salida es: "1+1" (no 2)

La salida es una cadena y no un ResultInt. Sé que number1+mathOperation+number2 lo hacen, pero quiero un resultado matemático y no una cadena juntos.

¿Cómo puedo arreglarlo?

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Puede usar la función eval que evalúa el código JavaScript arbitrario como una cadena.

Advertencia : eval es MUY peligroso debido a las vulnerabilidades XSS y nunca debe usarse para ejecutar entradas de usuario no serializadas.

 const number1 = 3, number2 = 4; const mathOperationList = ['+', '-', '*', '/']; function getRandomOperation() { var randomMathOperation = mathOperationList[Math.floor(Math.random() * mathOperationList.length)]; return randomMathOperation; } const mathOperation = getRandomOperation(); console.log("What is "+number1 + " "+mathOperation+" "+number2 +"?"); const mathResult = eval(`${number1}${mathOperation}${number2}`); console.log(mathResult);

Usando switch-case (más seguro)

 const number1 = 3, number2 = 4; const mathOperationList = ['+', '-', '*', '/']; function getRandomOperation() { var randomMathOperation = mathOperationList[Math.floor(Math.random() * mathOperationList.length)]; return randomMathOperation; } function performOperation(left, right, operator) { switch (operator) { case "+": return left + right; case "-": return left - right; case "*": return left * right; case "/": return left / right; } } const mathOperation = getRandomOperation(); console.log("What is "+number1 + " "+mathOperation+" "+number2 +"?"); const mathResult = performOperation(number1, number2, mathOperation); console.log(mathResult);

about 4 years ago · Juan Pablo Isaza Relatório

0

Qué no hacer

No debe usar eval() ya que puede presentar serios problemas de seguridad y es simplemente una mala práctica. En tu caso no hay mucho riesgo ya que los valores de momento no los proporciona un usuario, pero una vez que lo están te puedes meter en serios problemas.

Supongamos que permite que los usuarios proporcionen valores para el número y no los verifica adecuadamente, lo siguiente constituiría un ataque de denegación de servicio (DoS) exitoso en su programa porque esto causará un bucle infinito.

 const number1 = "for(;;);"; const mathOperation = "+"; const number2 = 2; eval(number1 + mathOperation + number2);

También abre otros vectores de ataque, así que simplemente no uses eval() .

qué hacer en su lugar

En su lugar, declare una matriz de funciones, una función para cada operación y elija aleatoriamente una función.

 function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min)) + min; } const mathOperationList = [ { func: (a, b) => a + b, symbol: "+" }, { func: (a, b) => a - b, symbol: "-" }, { func: (a, b) => a * b, symbol: "*" }, { func: (a, b) => a / b, symbol: "/" }, ]; function getRandomOperation() { const randomMathOperation = mathOperationList[Math.floor(Math.random() * mathOperationList.length)]; return randomMathOperation; } const { func: mathOperation, symbol } = getRandomOperation(); const number1 = getRandomInt(1, 10); const number2 = getRandomInt(1, 10); console.log("What is " + number1 + " " + symbol + " " + number2 + "?"); const mathResult = mathOperation(number1, number2); console.log(mathResult);

about 4 years ago · Juan Pablo Isaza Relatório

0

Podría tomar un objeto con todas las funciones y obtener primero el operador.

 const getRandomOperator = () => operators[Math.floor(Math.random() * operators.length)], operators = ['+', '-', '*', '/'], functions = { '+': (a, b) => a + b, '-': (a, b) => a - b, '*': (a, b) => a * b, '/': (a, b) => a / b }, operator = getRandomOperator(), number1 = 10, number2 = 5, result = functions[operator](number1, number2); console.log(`What is ${number1} ${operator} ${number2}?`); console.log(result);

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda