JavaScript array.length 在元素被推入后保持 0
JavaScript array.length remains 0 after elements been pushed in
我在编写一个括号验证函数,似乎在某些情况下,即使某些元素被推入,tmpStack.length
仍然保持0
。对于像"[(1+2)]"
或"[(1+2]"
这样的正常输入,该函数有效,但对于"[12"
这样的输入,它不起作用,因为tmpStack.length
保持0
。另一个困扰我的问题是,如果输入是单括号,例如[
函数返回true
尽管它在初始验证中应该失败。
function validator(str){
var flag=true;
var tmpStack=[];
var sliced = str.split("");
if (str.length<1 &&
((str!="(") || (str!=")") || (str!="[") ||
(str!="]") || (str!="{") || (str!="}")))
return flag;
else {
for(var i =0;i<=str.length;i++){
if((sliced[i]=="[") || (sliced[i]=="{") || (sliced[i]=="("))
tmpStack.push(sliced[i]);
else {
if((sliced[i]=="]" && tmpStack.pop()!="[") || (sliced[i]=="}" && tmpStack.pop()!="{" ) || (sliced[i]==")" && tmpStack.pop()!="("))
{
console.log("dis-match found for: "+(sliced[i]));
flag=false;
break;
}
}
}
}
if(tmpStack.length % 2)
return flag;
else
return !flag;
}
var tstStr="[+1";
console.log(validator(tstStr));
当您发现错误时,您需要从函数返回,我认为:
return false;
而不是
flag=false;
break;
我也没有理解:
if(tmpStack.length % 2)
return flag;
else
return !flag;
似乎如果数组中有任何内容 - if 应该返回 false:
return tmpStack.length ? false : true;
或者只是
return !tmpStack.length
http://jsfiddle.net/m68j0926/
更新
重构的解决方案:
function validator(str){
var tmpStack = [];
for (var i = 0; i < str.length; i++) {
if (str[i].match(/'[|'{|'(/)) {
tmpStack.push(str[i]);
} else if (
(str[i]=="]" && tmpStack.pop()!="[") ||
(str[i]=="}" && tmpStack.pop()!="{" ) ||
(str[i]==")" && tmpStack.pop()!="(")
) {
console.log("dis-match found for: " + (str[i]));
return false;
}
}
return !tmpStack.length;
}
var tstStr="[+]()1";
console.log(validator(tstStr));
相关文章:
- Array.length似乎不起作用;console.log则显示其他情况
- 有时 array.length 只在 .push() 之后工作(为什么?)
- for(数组中的i)和for(var i=0;i<array.length;i++)之间的差异
- 在我执行alert()之前,Javascript array.length为0
- Array.length vs Array.prototype.length
- 为什么 Array.Length = 1 当空数组通过 ajax 传递给函数时
- Javascript array.length 为 0,但数组填充了 40 个项目
- 循环中的 Array.pop() 真的比 Array.length = 快 50 倍吗?
- JavaScript array.length 在元素被推入后保持 0
- 在javascript中调用array.length的效率
- for (var x in array) 和 for (var x=0, y= array.length; x
- javascript array.length 函数的奇怪结果
- “array.length -1”在JavaScript中是什么意思
- 为什么我的 array.length 返回这么高的数字
- 获取 array.length 中的第一个数字
- 什么's(数组中的x)和(i=0;i<array.length;i++)之间的差值
- Javascript:for(var i<array.length)v.s.for(数组中的e)
- Jquery array.length比实际数组长度短
- jQuery merge() 和 array.length 数据类型
- if(array.length===1) 条件对长度> 1 的数组不起作用