Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

235
Vistas
cómo convertir una cadena a un signo matemático de una matriz en js

Aquí hay una matriz

 getMathResult(['200', '+', 300])

Necesito convertir todos los datos en una expresión matemática y ejecutarla. ¿Cómo hacerlo?

ps tenemos que hacerlo sin

 eval
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

eval puede hacer eso:

"La función eval() evalúa el código JavaScript representado como una cadena".

 console.log( eval('200' + '+' + 300) )

Ahora para la parte de la matriz:
(El espaciado es para facilitar la lectura)

 console.log( eval( ['200', '+', 300].join('') ) )

De nada.


Has editado tu pregunta pidiendo hacerlo sin eval , así que:

 let arr = ['200', '+', 300, '-', '50'] let sum = 0 let operator = '+' // assume as default let validOps = '+-' // place here all supported operations for ( let item of arr ){ if (+item){ // "+item" casts a string to a number, or to NaN if( operator == '+' ) sum = sum + +item else if ( operator == '-' ) sum = sum - +item } else if( validOps.includes(item) ) operator = item } console.log(sum)

Y así sucesivamente para cada operador que desee admitir :)

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede reducir la matriz y realizar un seguimiento de la operación anterior. Cuando llegue a un nuevo número, simplemente aplique la operación actual y vuelva a establecerla en nulo.

 const getMathResult = (tokens) => tokens.reduce((acc, token, index, all) => { if (!isFinite(token)) return { ...acc, op: token } if (!acc.op) return { ...acc, op: null, total: +token } switch (acc.op) { case '+': return { ...acc, op: null, total: acc.total + (+token) } case '-': return { ...acc, op: null, total: acc.total - (+token) } case '*': return { ...acc, op: null, total: acc.total * (+token) } case '/': return { ...acc, op: null, total: acc.total / (+token) } } return acc; }, { op: null, total: 0 }).total; console.log(getMathResult(['200', '+', 300])); // 500 console.log(getMathResult([48, '/', 4])); // 12 console.log(getMathResult([5, '+', 2, '*', 3])); // 21 (left-to-right vs PEMDAS)

Aquí hay una versión alternativa que puede ser más fácil de seguir:

 const getMathResult = (tokens) => tokens.reduce((acc, token, index, all) => { let { op, total } = acc; if (isFinite(token)) { if (op) { switch (op) { case '+': { total += +token; break; } case '-': { total -= token; break; } case '*': { total *= token; break; } case '/': { total /= token; break; } } } else { total = +token } } else { op = token; } return { ...acc, op, total }; }, { op: null, total: 0 }).total; console.log(getMathResult(['200', '+', 300])); // 500 console.log(getMathResult([48, '/', 4])); // 12 console.log(getMathResult([5, '+', 2, '*', 3])); // 21 (left-to-right vs PEMDAS)

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda