如何将带有变量的方程转换为带有变量值的字符串?

问题描述 投票:0回答:2

如果 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);
会更方便。

javascript string formula eval
2个回答
0
投票
您可以简单地创建一个函数,将公式中的变量名称替换为其值。比如:

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);


0
投票
我强烈建议任何阅读它的人使用 eval 之外的其他东西

但是...

您可以替换每个字母并对其使用 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)

© www.soinside.com 2019 - 2024. All rights reserved.