2015-08-09 23 views
2

說我具備的條件設置是這樣的:如果在javascript中的某些條件下如何去下一個塊?

if (condition1) { 
    for (var i in objx) { 
     if (objx[i] == 3) { 
     //go to next else if 
     } 
    } 
} else if(condition2) { 
    ... 
} 

這樣有兩個方面,它應該達到CONDITION2 if語句:

  1. 當條件1爲假
  2. 東西在裏面循環並不像需要。

我可以把整個如果其他內部循環,但有更多的條件,這隻會使代碼更難以閱讀和遵循。其次,我考慮終於嘗試了goto和標籤方法,但據某人說,根據這個http://es5.github.io/#x12.12轉到將會過時。

理想情況下:我寧願使用break的方法,並繼續以某種方式如果else語句。

+1

將代碼放在一個函數並調用它,當你需要它。 – Pointy

+1

執行此操作的唯一可能方式是我認爲是** GOTO **語句,但這被認爲是不好的編程習慣。如果你可以詳細闡述你的目標,那麼我們可以建議你選擇。 – CrakC

+1

@Pointy我猜他想保持代碼原樣,只是傳輸控件。 – CrakC

回答

2

使用萎靡不振的變量,這樣

// Initial value is `true` because, if `condition1` is falsy, we still have to 
// evaluate `condition2` by default. 
var flag = true; 

if (condition1) { 
    // `condition1` is truthy, skip `condition2` 
    flag = false; 

    for (var i in objx) { 
    if (objx[i] == 3) { 
     // We need to check the second condition 
     flag = true; 
     // skip rest of the loop 
     break; 
    } 
    } 
} 

// Evaluate condition2 only if `flag` is set 
if (flag && condition2) { 
    ... 
} 
+2

last if if if((flag || condition2)&&!condition1)' – GUL

+1

@GUL如果'condition1'爲真,'flag'已經是'false'。 – thefourtheye

1

你不能從一個去,如果(否則如果)塊地,但是您可以移動內部檢查,如果1號。 condition1 & & conditionFunc(objx) - 表示如果condition1爲true,則運行func,如果爲true,那麼如果是block,則執行此操作,如果不是,則會移至另一個else if。

function conditionFunc(objx) { 
    for (var i in objx) { 
    if (objx[i] == 3) { 
     return false; 
    } 
    } 

    return true; 
} 

if (condition1 && conditionFunc(objx)) { 

} else if (condition2) { 
    ... 
} 
2

稍微其他的解決方案與switch

switch (true) { 
    case condition1: 
     var doBreak = true; 
     for (var i in objx) { 
      if (objx[i] == 3) { 
       // go to condition2 
       doBreak = false; 
       break; 
      } 
     } 
     if (doBreak) { 
      break; 
     } 
    case condition2: 
     // ... 
} 
相關問題