Biblioteca de JavaScript para operaciones de procesamiento.
-
12-12-2019 - |
Pregunta
Mi código genera dinámicamente operaciones de cadena / número.El programa construye dinámicamente algo similar a lo siguiente:
"My name " + "is " + "G-Man"
"Your age is " + "21"
"5" * "5"
Quiero enviar esto:
My Name is G-Man
Your age is 21
25
Puedo escribir una biblioteca para esto, pero actualmente estoy en las limitaciones de tiempo.Si alguien consciente de una biblioteca que puede realizar ecuaciones similares a anteriores (int + int= int), (cadena + int= cadena), etc.?
Solución
Creo que es probable que solo desee usar la función de evalación de JavaScript.
var a = eval("5 + 5");
console.log(a); // >> 10
Editar wow Tengo 2 votos abajo en la velocidad casi robótica cuando respondí esta pregunta ~ raro, pero nuevamente Eval es probablemente lo que quiera.
var a = eval("'Your age is ' + '22'");
console.log(a); // >> Your age is 22
Editar 2 Aquí hay un punto de partida para hacer alguna validación rápida de la entrada para asegurarse de que nada de Naughty reciba Eval'd.
var test1 = [
"testing"
,"+"
,"123"
];
var test2 = [
"8"
,"*"
,"5"
,"/"
,"3"
];
var test3 = [
"window.alert('bad');"
];
var test4 = [
"\"It's hard to escape things\", said "
," + "
,"Bob"
];
function supereval(arr) {
var sEval = '';
for(var i=0; i<arr.length; i++) {
if(!isNaN(parseFloat(arr[i])) && isFinite(arr[i])) { // number
sEval += arr[i];
//console.log("> number");
} else if( /^\s?[\+\/\*\-]\s?$/i.test(arr[i]) ) { // operation
sEval += arr[i];
//console.log("> operation");
} else { // string
sEval += "\"" + arr[i].replace(/"/g, '\\"') + "\"";
//console.log("> string");
}
}
console.log("DEBUG:" + sEval);
return eval(sEval);
}
console.log(supereval(test1));
console.log(supereval(test2));
console.log(supereval(test3));
console.log(supereval(test4));