我真的对一个问题感到震惊。
使用 JavaScript 转换下面的表达式
[ "AND", ["<", "var1", "var2"], [ "OR", [">", "var3", "var4"], ["==", "var5", "var6 "] ]
至
var1 < val2 AND (var3 > val4 OR val5 == val6)
抱歉,我没有更多信息
我真的对一个问题感到震惊。
使用 JavaScript 转换下面的表达式
[ "AND", ["<", "var1", "var2"], [ "OR", [">", "var3", "var4"], ["==", "var5", "var6 "] ]
至
var1 < val2 AND (var3 > val4 OR val5 == val6)
抱歉,我没有更多信息
试试这种递归方法
var convert = function(arr) {
if (typeof arr[0] == 'string' && arr[1] instanceof Array && arr[2] instanceof Array) {
return ' (' + convert(arr[1]) + arr[0] + convert(arr[2]) + ') ';
} else {
return ' ' + arr[1] + ' ' + arr[0] + ' ' + arr[2] + ' ';
}
}
尝试这个..
function rpn( input ) {
var ar = input.split( /\s+/ ), st = [], token;
while( token = ar.shift() ) {
if ( token == +token ) {
st.push( token );
} else {
var n2 = st.pop(), n1 = st.pop();
var re = /^[\+\-\/\*\>\<\==\.]$/;
if( n1 != +n1 || n2 != +n2 || !re.test( token ) ) {
throw new Error( 'Invalid expression: ' + input );
}
st.push( eval( n1 + token + ' ' + n2 ) );
}
}
if( st.length !== 1 ) {
throw new Error( 'Invalid expression: ' + input );
}
return st.pop();
}
您可以尝试以下语法:
if ((var1 < var2) AND (var3 > var4 OR var5==var6))
尝试使用下面提到的算法
接受来自用户的前缀字符串。
一次从右一个字符开始扫描字符串。
如果是操作数,则将其压入堆栈。
如果是运算符,则弹出 opnd1、opnd2 并按顺序(opnd1、optr、opnd2)连接它们。
将结果压入堆栈。
重复这些步骤,直到输入前缀字符串的 arr 结束。
弹出堆栈的剩余元素,这是所需的中缀表示法,等效于给定的前缀表示法。