Pergunta

Meu código dinamicamente gera string/número de operações.O programa cria dinamicamente algo semelhante à seguinte:

"My name " + "is " + "G-Man"
"Your age is " + "21"
"5" * "5"

Eu quero esta saída:

My Name is G-Man
Your age is 21
25

Sou capaz de escrever uma biblioteca para isso, mas eu atualmente estou sob restrições de tempo.Se alguém consciente de uma biblioteca que pode executar equações semelhante ao acima (int + int = int), (string + int = string), etc.?

Foi útil?

Solução

Eu acho que você provavelmente vai querer usar JavaScript incorporado em função EVAL.

var a = eval("5 + 5");
console.log(a); // >> 10

EDITAR Wow eu tenho 2 para baixo-votos em quase robótico de velocidade quando eu respondi essa pergunta ~estranho, mas, novamente, EVAL é provavelmente o que você quiser.

var a = eval("'Your age is ' + '22'");
console.log(a); // >> Your age is 22 

EDIT 2 Aqui está um ponto de partida para fazer algumas rápidas de validação de entrada para se certificar de que nada safadinho fica Eval gostaria.

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));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top