我现在正在处理个人项目(我试图在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"]
,如果有帮助的话。
(对不起多次修改)
答案 0 :(得分:1)
如果您有[" + 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>
&#13;
注意:您需要在myEval函数中放置一些x = 2传递给第二个表达式的替换。最终你也可以构建像我已经构建主表达式expr
。
警告:使用Eval是邪恶的。它会导致跨站点脚本等安全问题。
您也可以使用Math.js(我强烈推荐这个,如果可能的话,只使用已经构建的那些:)。
function myFunc()
{
var scope = {
x: 2
};
var f = math.eval('f(x) = 3x^2+4x+5', scope);
alert(f(2));
}
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/1.3.0/math.js"></script>
<body onload="myFunc()">
</body>
&#13;
答案 1 :(得分:1)
为此可以使用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
函数。
答案 2 :(得分:0)
您需要接受正规表达教育。这仍然不能解决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'));
在您尝试解决Math.pow()
时,请查看x
。
检查出来: