2016-04-12 85 views
0

我試圖通過數組循環,並檢查用戶的IP地址是否匹配我的clientip數組中的一個IP地址。在第一個循環(i = 0)之後,它立即跳轉到else語句,並且不檢查數組中的其他元素。任何想法有什麼不對?我認爲這是我的邏輯錯誤。JavaScript - 使用for循環和if-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

謝謝大家! – krup

回答

0

For循環第一次迭代,因爲break stetement

+0

我刪除了它,它在第一次迭代後仍然跳轉到else語句。我在第一個if語句中設置了一個斷點,並且它又跳回了 – krup

+0

@krup呃,它跳轉到'else'分支,因爲你的if條件是錯誤的。刪除'break'只能解決這個問題:'不檢查數組中的其他元素'。顯然,它跳轉到'else'分支,因爲第一個客戶端IP不等於userip :) –

1

你有

休息後停止;

在這兩個如果和其他人,所以它總是會破環後第一次嘗試,而對於被打破......

嘗試:

<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> 
+0

'i> = clientip.length -1'會更糟糕。 –

+0

謝謝!有用! – krup

+0

「i> = clientip.length -1將會更糟糕。」 - 我永遠不會比clientip.length更大 –

0

爲什麼您使用內休息你的if和else語句?請刪除它們

也可以設置一個標誌,讓'found'變量給它初始值爲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"); 
}; 

否則你的週期的每個迭代將shoing找到/未找到消息

+0

這些中斷旨在在找到所需值時停止迭代。如果你已經找到你想要的東西,爲什麼要浪費時間繼續迭代? –

+0

@devlincarnate,是的,但在問題中,提問者在'if' *和'else'塊中使用'break',這意味着只有第一次迭代纔會運行。那裏可能根本就沒有一個循環。 –

+0

@devlincarnate即使在該邏輯之後,中斷也不應該出現在else語句中,否則如果在第一個位置找不到ip,它就不會被找到。 –

2

你最好儘量indexOf方法。

所以,如果你改變你的if語句,if(clientip.indexOf(userip.toString()) != -1)if(clientip.indexOf(userip.toString()) >=0) eveything會沒事的。因此你不需要break聲明。

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檢查數組一定值的presense:對您有所幫助

if(clientip.indexOf(userip.toString()) != -1) 
{ 
// userip was found 
} else { 
// userip was not found 
}