假设我有一个类似下面的Javascript字符串
var fnStr = "function(){blah1;blah2;blah3; }" ;
Run Code Online (Sandbox Code Playgroud)
(这可能来自用户输入的表达式,正确消毒,或者可能是某些符号计算的结果.这无关紧要).
我想定义fn好像我的代码中有以下行:
var fn = function(){blah1;blah2;blah3; } ;
Run Code Online (Sandbox Code Playgroud)
我怎么做?
我提出的最好的是以下内容:
var fn = eval("var f = function(){ return "+fnStr+";}; f() ;") ;
Run Code Online (Sandbox Code Playgroud)
这似乎是诀窍,即使它使用了可怕的eval(),并使用了一个稍微复杂的论点.我可以做得更好吗?即要么不使用eval(),要么提供更简单的参数?
我在网页 (150+) 中有一堆字段,需要在它们上运行方程式才能产生结果。
我目前存储这样的方程:
<input name="F7" type="text" class="numeric" data-formula="([C7]-[D7])/[E7]" readonly />
Run Code Online (Sandbox Code Playgroud)
当输入模糊时,我使用 jQuery 选择器遍历所有具有data-formula属性的输入,采用公式,并使用正则表达式替换指针([C7]等式中的 )替换为其适当的值。
之后,我eval()将方程得到一个结果,并将其放入正确的输入中。这很好用,但速度很慢,导致网页挂起几秒钟,如果每次输入模糊时都会发生这种情况,这很糟糕。
有没有一种方法可以在不使用的情况下评估一个方程,例如“(1-2)/4” eval()?这些方程也可能有函数,例如平方根(这eval()很好,因为我可以直接Math.sqrt()输入公式),并且数字可能是小数。
注意:这个应用程序必须在 IE7 和 8 上运行,所以我不相信我可以使用 Webworkers 或类似的东西。我还考虑过仅在点击“保存”按钮后运行此代码,但如果可能,我更希望用户界面实时更新
是否有一种简单的方法,使用javascript,转换以下表达式
e*((a*(b+c))+d)
Run Code Online (Sandbox Code Playgroud)
变成类似的东西
multiply(e, add(multiply(a, add(b,c)), d))
Run Code Online (Sandbox Code Playgroud)
表达式将存储在字符串中.我愿意接受任何可以避免编写自己的解析器的解决方案(库,buitl-in功能,......)
编辑:我应该已经预先确定我实际上并不想使用乘法和添加函数,这样做的目的是定义我自己的函数来替换乘法并添加并对变量执行自定义操作
我有一个库,它具有基于某些字段过滤对象的功能(每个字段都有特定类型的类型 - 有关https://github.com/jy95/mediaScan/wiki 的更多信息)
最大的问题是处理来自多个来源的数字属性
// to handle number operations
export interface NumberExpressionObject {
operator: "==" | ">" | "<" | ">=" | "<=";
number: number;
}
// additional Properties
export interface AdditionalProperties {
type: AdditionalPropertiesType;
name: string;
value: boolean | string | string[] | number | NumberSearchSyntax;
}
Run Code Online (Sandbox Code Playgroud)
例如 :
expect((libInstance.filterTvSeries({
additionalProperties: [
{type: "number", name: "whateverFieldThatDoesn'tExist", value: "<50"},
{type: "number", name: "AnotherField", value: undefined},
{type: "number", name: "AnotherField2", value: "<=25"},
{type: "number", name: "AnotherField3", value: ">25"}, …Run Code Online (Sandbox Code Playgroud) 你必须原谅我,我是JavaScript新手......就像几个星期新的一样.无论如何,我使用JavaScript创建了一个代码来生成两个随机数,要求添加它们,并根据用户响应给出"那是正确的/那是不正确的"答案.我想将其他符号( - ,*,/)添加到等式中,并决定尝试在数组中执行此操作.这是我到目前为止:
<head>
<meta charset="utf-8" />
<title>Math Games</title>
</head>
<body>
<script>
var Answer;
var numbers=new Array();
var signs=new Array();
var Signs2=new Array();
var SignNoQuote=new Array();
numbers[0]=(Math.floor(Math.random() * 10 + 1));
numbers[1]=(Math.floor(Math.random() * 10 + 1));
signs[0]="+";
signs[1]="-";
signs[2]="*";
signs[3]="/";
SignNoQuote[0]="+";
SignNoQuote[1]="-";
SignNoQuote[2]="*";
SignNoQuote[3]="/";
Signs2[0]=(Math.floor(Math.random() * 4));
Answer=window.prompt("What is " + numbers[0] + signs[Signs2[0]] + numbers[1] + "?");
if(Answer==numbers[0] + SignNoQuote[Signs2[0]] + numbers[1])
{
window.alert("That's Correct!");
}
else
{
window.alert("That is Incorrect");
}
</script>
<a href="file:///E:/ECS/Legitimate%20Work/mathtest.html">Refresh</a>
</body>
Run Code Online (Sandbox Code Playgroud)
它正确地问了这个问题,但是当给出正确的答案时,它说它是不正确的.我尝试从"SignNoQuote"数组的值中删除引号,希望它可以工作,但是当它以这种方式运行时,脚本都不会运行,调试器声称它是语法错误?我做错了什么,我该如何解决?
我想知道一种检查字符串是否是数学表达式的简单方法。例如,Google(和其他搜索引擎)在您搜索时使用它。
PS:我不一定要检查诸如sin, 之类的东西cos。
示例:2+2应该返回true但letters+somethingelse应该返回false
谢谢!