代码如下
任意给一个对对象或者数组,通过遍历,递归查找其中是否存在某个值,
代码我已经写的差不多了,但是只支持单次查找。
因为flag重置问题没法解决。
如果在函数体最后if里面,flag= false,则涉及到对象中的数组的时候就不起作用了。因为if(flag)虽然执行了
但是**并没有跳出递归。**
所以我的问题就是怎么正确重置flag~
希望有朋友能够解惑~_**
<script type="text/javascript">
var flag = false;
function exitindata(data,item){
if(data instanceof Array){
var i = data.length;
while(i--){
if(flag){
break;
}
if(data[i] === item){
flag = true;
break
}else{
if(data[i] instanceof Array || data[i] instanceof Object){
exitindata(data[i],item);
}
}
}
}else{
for(var key in data){
if(flag){
break
}
if(data.hasOwnProperty(key) === true){
if(data[key] === item){
flag = true;
break
}else{
if(data[key] instanceof Array || data[key] instanceof Object){
exitindata(data[key],item);
}
}
}
}
}
if(flag){
return true;
}else{
return null
}
}
function find(item){
var data = [9,
{
item1:50,
item2:94,
item3:[
{
cc: 9999,
ff:9090
}
]
}
,65,1111,54,11,0,1,3,7,8,5,649,841];
console.log(exitindata(data,item));
}
find(9090)
find(9091)
find(9999)
</script>
单次查找没问题。
多次就出问题啦