我正在尝试遍历一个数组并检查用户的ip地址是否与我的clientip数组中的一个i.p地址匹配。在第一个循环(i = 0)之后,它立即跳转到else语句并且不检查数组中的其他元素。知道什么是错的吗?我认为这是我的逻辑错误。
<script>
$(document).ready(function(){
for(var i = 0; clientip.length; i++){
if(clientip[i] === userip.toString() ){
console.log("Your IP is :", userip);
$("#showButtons").show();
break;
}
else{
console.log("Wrong ip address");
console.log(userip);
$("#showButtons").hide();
alert("You are not connected to the correct IP Address");
break;
};
};
});
</script>
谢谢
答案 0 :(得分:2)
您最好尝试indexOf方法。
因此,如果您将if语句更改为if(clientip.indexOf(userip.toString() ) != -1)
或if(clientip.indexOf(userip.toString() ) >=0)
,那么就可以了。因此,您不需要break
语句。
答案 1 :(得分:1)
你有
中断;
在if和else中,所以在第一次尝试后它总会断开循环,并且因为它被破坏了......
<强>尝试:强>
<script>
$(document).ready(function(){
for(var i = 0; i < clientip.length; i++){
if(clientip[i] === userip.toString() ){
console.log("Your IP is :", userip);
$("#showButtons").show();
break;
}
else if (i === clientip.length -1) {
console.log("Wrong ip address");
console.log(userip);
$("#showButtons").hide();
alert("You are not connected to the correct IP Address");
break;
};
};
});
</script>
答案 2 :(得分:0)
由于break
stetement
答案 3 :(得分:0)
为什么在if和else语句中使用break?试着删除它们
另外,你可能想要设置一个标志,让我们说'找到'变量给它初始值为false,并在if语句中将其设置为true,以防在你的数组中找到ip,然后,一旦完成搜索后,您可以使用if / else语句
if(found===true ){
console.log("Your IP is :", userip);
$("#showButtons").show();
}
else{
console.log("Wrong ip address");
console.log(userip);
$("#showButtons").hide();
alert("You are not connected to the correct IP Address");
};
否则你周期的每次迭代都会显示找到/未找到的消息
答案 4 :(得分:0)
clientip.length
将始终为truthy(除非数组为空),因此您应该像这样声明循环:
for(var i = 0; clientip.length < i; i++)
你的循环其余部分的逻辑有点像bizzarre。 else
子句处理如果IP与数组中的任何内容不匹配会发生什么情况,但是在循环完成之前你不能知道,所以你不应该把在那里:
var found = false;
for(var i = 0; clientip.length; i++){
if(clientip[i] === userip.toString() ){
console.log("Your IP is :", userip);
$("#showButtons").show();
// You found a match. You're done.
found = true
break;
}
}
// No match was found.
if(!found) {
console.log("Wrong ip address");
console.log(userip);
$("#showButtons").hide();
alert("You are not connected to the correct IP Address");
break;
}
最后,不要在循环或if / else块后面加分号。充其量,他们什么都不做,最糟糕的是,他们会让你的代码做一些时髦的事情。
但是,有easier ways来检查数组是否存在某个值:
if(clientip.indexOf(userip.toString()) != -1)
{
// userip was found
} else {
// userip was not found
}