JavaScript - 使用for循环和if-else语句来遍历数组

时间:2016-04-12 19:28:50

标签: javascript jquery arrays

我正在尝试遍历一个数组并检查用户的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>

谢谢

5 个答案:

答案 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
}