打印出变量中包含的数学表达式

时间:2019-02-26 10:56:46

标签: javascript string

不太确定是否可行,似乎找不到任何答案。

我发现了有关运行以字符串形式给出的数学表达式的问题,它们与我正在寻找的东西相反。

基本上是在调试我的代码,并想将表达式输出到控制台。当前,每次执行代码且数量不断增长时,都会运行30种不同表达式的计算。

EG:

  var equation = (1 + 5) * (21 x 7);

我已经简化了它,因为实际上已经为输出解析了变量。

我想将表达式作为字符串运行计算,但还要保持计算对于应用程序的运行。

我当前正在连接字符串及其繁琐的工作,所以我希望可能有比这更好的解决方案:如您所见,我确实需要变量按预期工作,而不是整个表达式,从而使简化的代码更具可读性上面的结果。

这适用于varuns答案,但就我而言,请参见以下更新:

var printout = '(' +var1+ ' + ' +var2+ ') * (' +var3+ ' * ' +var4+ ')';

根据下面的Varun的答复和评论进行更新:

var array = [1, 5, 21, 7];

var printout = '(' +array[0]+ ' + ' +array[1]+ ') * (' +array[2]+ ' * ' +array[0]+ ')';

2 个答案:

答案 0 :(得分:2)

我猜下面是您要查找的代码

 var eq = `(1 + 5) * (21 * 7)`;

console.log( eq + ' = ' + eval(eq) )

您也可以像这样增强它以获得更多动态内容

var array = [1, 5, 21, 7];
var inp1 = array[0]
var inp2 = array[1]
var inp3 = array[2]
var inp4 = array[3]
var addOperand = "+"
var multiplyOperand = "*"

var eq = `(${inp1} ${addOperand} ${inp2}) ${multiplyOperand} (${inp3} ${multiplyOperand} ${inp4})`;

console.log( eq + ' = ' + eval(eq) )

由于您正在使用数组,因此这似乎是可扩展且高效的

var array = ['(',1, '+', 5,')', '*','(', 21,'*', 7,')'];

eq = array.join(' ')

console.log( eq + ' = ' + eval(eq) )

答案 1 :(得分:1)

可能更通用,但不确定是否仅需要进行测试, 这里的方程式可以是任何字符串。

lineNo是函数内部方程式的lineNo

function calculate(x, y) {
	var equation = (x + 5) * (y * 7);
	let lineNo = 1
	console.log(arguments.callee.toString().split('\n\t')[lineNo].replace(/x/g, x).replace(/y/g, y))
}

calculate(3, 4)