私は現在、eval()関数を使用してブール式を評価する必要があるJSルールエンジンを作成しています。
まず、次のような方程式を作成します。
var equation = "relation.relatedTrigger.previousValue" + " " + relation.operator +
" " + "relation.value";
Relation.relatedTrigger.previousValueは、比較したい値です。
Relation.operatorは演算子です( "=="、 "!="、<=、 "<"、 ">"、> = "のいずれか)。
Relation.valueは、比較したい値です。
次に、この文字列をeval関数に渡すだけで、trueまたはfalseが返されます。
return eval(equation);
これは、(単語と数字を使用して)完全に正常に機能するか、>=と<=を除くすべての演算子で機能します。例:方程式を評価する場合:
relation.relatedTrigger.previousValue <= 100
previousValue = 0、1、10、100およびすべての負の数の場合はtrueを返しますが、その間のすべての場合はfalseを返します。
私の質問に答えるか、別の解決策を見つけるのを手伝ってくれる人の助けをいただければ幸いです。
よろしく、
Augier。
PS eval()関数の不安定さについてのスピーチは必要ありません。Relation.relatedTrigger.previousValueに指定された値はすべて事前定義されています。
編集:これが完全な機能です:
function evaluateRelation(relation)
{
console.log("Evaluating relation")
var currentValue;
//if multiple values
if(relation.value.indexOf(";") != -1)
{
var values = relation.value.split(";");
for (x in values)
{
var equation = "relation.relatedTrigger.previousValue" + " " + relation.operator +
" " + "values[x]";
currentValue = eval(equation);
if (currentValue)
return true;
}
return false;
}
//if single value
else
{
//Evaluate the relation and get boolean
var equation = "relation.relatedTrigger.previousValue" + " " + relation.operator +
" " + "relation.value";
console.log("relation.relatedTrigger.previousValue " + relation.relatedTrigger.previousValue);
console.log(equation);
return eval(equation);
}
}
回答:以下のKennyTMによって提供されます。文字列の比較は機能しません。数値への変換が必要でした。