如何将变量表达式转换为可执行代码(而不是替换值)
How do you convert a variable expression to executable code (not to substitute values in)
我现在正在做一个个人项目(我正在尝试用javascript中的给定表达式绘制一个图形(,我遇到了一个问题。
说s = "3x^2+4x+5"
,我正在尝试将其转换为return 3*x*x + 4*x + 5
,在函数中
myGraph.drawEquation(function(x) {
return 3*x*x + 4*x + 5;
}, 'green', 3);
我环顾四周,遇到了eval()
,但它需要将值替换为x
。其他指南说我需要制作自己的解析器,但是您如何创建一个执行上述操作的解析器?
目前我有一个函数 将s = "3x^2+4x+5"
转换为["+3x^2","+4x","+5"]
转换为["+3*x*x","+4*x","+5"]
,如果有帮助的话。
(抱歉多次编辑(
您可以使用 math 的表达式解析器.js为此,它支持定义函数:
var f = math.eval('f(x) = 3x^2+4x+5');
console.log(f(1)); // outputs 12
console.log(f(2)); // outputs 25
console.log(f(3)); // outputs 44
math.js有自己的表达式解析器,它不使用JavaScript的eval
函数。
如果你有这个 ["+3*x*x","+4*x","+5"]
然后你可以做下面这样的事情来评估。
// Code goes here
function myFunction(){
//alert('loaded')
var myexpr = ["+3*x*x","+4*x","+5"];
var expr = "";
for(s in myexpr)
{
expr += myexpr[s];
}
expr = "y = "+expr
setH1Text(expr);
myEval(expr,"x = 1");
}
function setH1Text(text)
{
document.getElementById('jenish').innerHTML = text;
}
function myEval( ex, ex1)
{
var evaltobeexecuted = ex1+";"+ex
eval(evaltobeexecuted)
setH1Text(y);
//alert(y)
}
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
</head>
<body onload="myFunction()">
<h1 id="jenish">Hello Plunker!</h1>
</body>
</html>
注意:您需要在myEval函数中放置一些x = 2传递给第二个表达式的替换。 最终你也可以像我一样构建主表达式expr
。
注意:使用Eval是邪恶的。它带来了跨站点脚本等安全问题。
你也可以使用数学.js(我强烈推荐你使用已经构建的,如果可能的话:)(
function myFunc()
{
var scope = {
x: 2
};
var f = math.eval('f(x) = 3x^2+4x+5', scope);
alert(f(2));
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/1.3.0/math.js"></script>
<body onload="myFunc()">
</body>
你需要一些有规律的表达教育。这仍然无法解决x
问题,但值得一看:
function youreWelcome(str, x){
return str.replace(new RegExp('('+x+')', 'g'), '*$1').replace(new RegExp('('+x+')''^(''d)+', 'g'), function(m, p1, p2){
var r = [];
for(var i=0; i<p2; i++){
r.push(p1);
}
return r.join('*');
});
}
console.log(youreWelcome('3x^2+4x+5', 'x'));
console.log(youreWelcome('7n^3+42n^5+8', 'n'));
当您尝试解决x
时,请查看Math.pow()
。
看看这个:
JavaScript:计算一个数字的第n个根
相关文章:
- 通过查询替换/写入文件中的代码
- 此nodeValue替换代码有什么问题
- 如何避免重复以下替换代码
- 我可以替换“;获取“;方法用“;POST”;代码库中的任何位置
- JavaScript's替换与document.create()结合的函数-这个代码是做什么的
- javascript:搜索并用不同的颜色代码替换十六进制颜色代码
- 替换文本中的随机youtube链接以使用javascript嵌入代码
- 如何将变量表达式转换为可执行代码(而不是替换值)
- 用Perl替换HTML文件的JavaScript代码
- 在代码块中查找并替换为jQuery
- 每次单击时打开新窗口的 JavaScript 代码正在替换旧窗口并创建新的空白窗口
- 在 JS 中替换 html 中的代码字符串
- JavaScript 替换源标记中的代码
- 调整图像大小以使其完美地适合幻灯片,问题仍然是用 for 循环将 CSS 代码替换为我的图像
- 如何使替换代码工作
- 在两个JavaScript注释之间替换代码
- 如何使此字符串替换代码与`<br/>`标签
- 替换代码中除公式值以外的整数
- Javascript替换代码
- 如何在窗口中使用发送邮件信息.位置替换代码