2017-08-15 78 views
0

我有一個函數僅在定義指定變量時應用onclick。一旦定義了該變量,它將遍歷一組嵌套數組以產生用戶發送到的URL。我在if語句的邏輯中添加了一個else語句,以便如果條件不滿足,用戶將被髮送到一個默認的URL,指出「抱歉,找不到任何項目」。但是,由於它位於一個循環中,該循環通過循環查找不匹配的項目來查找所執行的項目,所以它在循環找到匹配之前始終應用else語句。For循環中的If/Else語句所需的語法

是否有更好的語法使用?

function applyUrl() { 

var locSelect = localStorage.getItem("loc"); 
var positSelect = localStorage.getItem("posit"); 
var userSelect = locSelect + " - " + positSelect; 
if(localStorage.getItem("posit") != null){ 

     for (var i = 0; i < sortedArray.length; i++) { 
     var stuff = sortedArray[i]; 
     for (var j = 0; j < stuff.length; j++) { 
      if(stuff[j] === userSelect) { 
        window.location.href = stuff[1]; 
       }else{ 
        window.location.href = 'default.html'; 
       } 
      } 

     } 

    } 
} 
+0

移動第二環 –

回答

1

我認爲最簡潔的方法是在你的for循環之外存儲一個變量,然後在完成之後導航到它,如果你還沒有redirUrl,也只能保持循環。

function applyUrl() { 

    var locSelect = localStorage.getItem("loc"); 
    var positSelect = localStorage.getItem("posit"); 
    var userSelect = locSelect + " - " + positSelect; 
    if (localStorage.getItem("posit") != null) { 
     var redirUrl;  
     for (var i = 0; i < sortedArray.length && !redirUrl; i++) { 
      var stuff = sortedArray[i]; 
      for (var j = 0; j < stuff.length && !redirUrl; j++) { 
       if (stuff[j] === userSelect) { 
        redirUrl = stuff[1]; 
       } 
      } 
     } 

     window.location.href = redirUrl || 'default.html'; 
    } 
} 

一個更好的方式來寫,這可能是

function applyUrl() { 
    var locSelect = localStorage.getItem("loc"); 
    var positSelect = localStorage.getItem("posit"); 
    var userSelect = locSelect + " - " + positSelect; 
    if (positSelect != null) { 
     // must have 2 elements and contain the user selection. 
     var selArray = sortedArray.find(v=>v.length >= 2 && v.indexOf(userSelect) !== -1); 
     if(selArray) { 
      window.location.href = selArray[1]; 
     } else { 
      window.location.href = 'default.html'; 
     } 
    } 
} 
+0

你好,先生!這工作!謝謝您的意見 :) –

0

您應該將默認重定向移到內部循環之外,並且只在父循環結束時執行。

function applyUrl() { 
    var locSelect = localStorage.getItem("loc"); 
    var positSelect = localStorage.getItem("posit"); 
    var userSelect = locSelect + " - " + positSelect; 

    if (localStorage.getItem("posit") != null) {  
    for (var i = 0; i < sortedArray.length; i++) { 
     var stuff = sortedArray[i]; 
     for (var j = 0; j < stuff.length; j++) { 
     if (stuff[j] === userSelect) { 
      window.location.href = stuff[1]; 
      return; 
     } 
     } 
    } 

    window.location.href = 'default.html';   
    } 
} 
+0

你好,先生以外的條件語句!我一直在嘗試不同的其他/ if語句,但並不認爲利用計數器等於長度來限制其參與循環。我會嘗試一下!謝謝你的反饋! –

+0

@FredArnold我編輯它,如果第一個解決方案沒有幫助嘗試這一點。 – Purgatory

+0

我想那樣,作品 –

0

因爲window.location.href重定向到另一個頁面,您可以用這種方式改變你的代碼邏輯:

for (var j = 0; j < stuff.length; j++) { 
    if(stuff[j] === userSelect) { 
     window.location.href = stuff[1]; 
    } 
} 
window.location.href = 'default.html'; 

這樣一來,如果沒有匹配外重定向會執行。