Javascript 用于检查数学表达式不工作的函数
检查数学表达式不起作用的函数 我在chrome上调试了它,发现当它到达第一个pop(Javascript 用于检查数学表达式不工作的函数,javascript,stack,Javascript,Stack,检查数学表达式不起作用的函数 我在chrome上调试了它,发现当它到达第一个pop(stack.pop()!==chars[I])时,它返回false,但不应该返回false var smarter_validate = function(str) { var chars = str.split(''); var stack = []; var lookup = { '(': ')', '[': ']', '{': '}', '<': '>
stack.pop()!==chars[I]
)时,它返回false,但不应该返回false
var smarter_validate = function(str) {
var chars = str.split('');
var stack = [];
var lookup = {
'(': ')',
'[': ']',
'{': '}',
'<': '>'
};
var left = Object.keys(lookup);
var right = Object.keys(lookup).map(function(key) {
return lookup[key]
});
for (var i = 0; i < chars.length; i++) {
if (left.indexOf(chars[i]) !== (-1)) {
stack.push(chars[i]);
} else if (right.indexOf(chars[i]) !== (-1)) {
if ((stack.length === 0) || (stack.pop() !== chars[i])) {
return false;
}
}
}
return (stack.length === 0);
};
console.log("SMART VALIDATE" + smarter_validate('(3+4[*2{6+8}])'));
var smarter\u validate=函数(str){
var chars=str.split(“”);
var堆栈=[];
变量查找={
'(': ')',
'[': ']',
'{': '}',
''
};
var left=Object.keys(查找);
var right=Object.keys(查找).map(函数(键){
返回查找[键]
});
对于(变量i=0;i
您实际上必须将弹出值的对应结束字符与字符[i]
进行比较,而不是将弹出值本身进行比较
所以你需要这样做
if (stack.length === 0 || lookup[stack.pop()] !== chars[i]) {
现在,当您从堆栈中{
时,您将从查找中查找相应的结束字符,并将其与当前结束字符进行比较
或者,您可以简单地将预期的结束字符推送到堆栈中,这样您就不必在比较过程中进行查找,如下所示
stack.push(lookup[chars[i]]);
表达式可能很复杂,您考虑过使用eval()吗?@目标语法显然与JavaScript表达式语法大不相同。*2
是故意的吗?看起来您的数学语法是中缀,但这是前缀。stack.push(查找[chars[i]])
谢谢大家:)如果有人有较短的函数,我很想知道!!