Dies ist eine kleine Funktion, die ich gerade zusammengestellt habe, um dieses Problem zu lösen. Sie baut den Ausdruck auf, indem die Zeichenfolge zeichenweise analysiert wird (eigentlich ist sie jedoch ziemlich schnell). Dies nimmt jeden mathematischen Ausdruck (beschränkt auf +, -, *, / Operatoren) und gibt das Ergebnis zurück. Es kann auch negative Werte und unbegrenzte Zahlenoperationen verarbeiten.
Sie müssen nur noch sicherstellen, dass * & / vor + & - berechnet wird. Ich werde diese Funktionalität später hinzufügen, aber im Moment macht das, was ich brauche ...
function expr (expr) {
var chars = expr.split("");
var n = [], op = [], index = 0, oplast = true;
n[index] = "";
for (var c = 0; c < chars.length; c++) {
if (isNaN(parseInt(chars[c])) && chars[c] !== "." && !oplast) {
op[index] = chars[c];
index++;
n[index] = "";
oplast = true;
} else {
n[index] += chars[c];
oplast = false;
}
}
expr = parseFloat(n[0]);
for (var o = 0; o < op.length; o++) {
var num = parseFloat(n[o + 1]);
switch (op[o]) {
case "+":
expr = expr + num;
break;
case "-":
expr = expr - num;
break;
case "*":
expr = expr * num;
break;
case "/":
expr = expr / num;
break;
}
}
return expr;
}
(Function("return 1+1;"))()
.