如果 Java 脚本(服务器脚本)中有以下内容:
const a = 5;
const b = 2;
const c = 4;
const d = 6;
const e = 3;
const formula = "a * b - c * (d / e)";
const result = eval(formula); // = 2
出于调试目的,我需要一个 Java 脚本函数,该函数将返回一个包含变量值的字符串作为结果:
const 变量 =“5 * 2 - 4 * (6 / 3)”为了简单起见,我将变量命名为 a、b、c、d、e,但它们是来自 JSON 结构的更复杂的变量,例如 a = item.tiers.main.low,b、c、d、e 也类似.
我尝试这样做: const 值 = " " + a + " * " + b + " - " + c + " * ( " + d + " / " + e + " )"; 这给出了预期的结果, 但有几十个公式可以用来做到这一点。调用如下函数:
const variables = get_var_string(formula);
会更方便。
function get_var_string(formula, variables) {
const variableNames = Object.keys(variables);
let result = formula;
for (const variableName of variableNames) {
const variableValue = variables[variableName];
const regex = new RegExp('\\b' + variableName + '\\b', 'g');
result = result.replace(regex, variableValue);
}
return result;
}
const a = 5, b = 2, c = 4, d = 6, e = 3;
const formula = "a * b - c * (d / e)";
const variables = { a, b, c, d, e };
const variableString = get_var_string(formula, variables);
console.log(variableString);
但是...
您可以替换每个字母并对其使用 eval
const a = 5;
const b = 2;
const c = 4;
const d = 6;
const e = 3;
const formula = "a * b - c * (d / e)";
const result = formula.replace(/[a-z]/g, m => eval(m))
console.log(result)