2016-11-17 69 views
0

我的問題是:如何通過被調用的函數觸發break;continue;循環?事情是,我不想在循環中嵌套所有可能的條件以避免代碼複雜性。我曾想過一些僞例如:函數調用中斷或繼續循環

var someObjects = [...] //array with some js objects  

for (var i = 0; i < someObjects.length; i++) { 
    var element = someObjects[i]; 
    doSomething(element); 
} 

function doSomething(object) { 
    //some code here 
    if (somethingIsDefined) { 
    doSomethingElse(object); 
    } 
} 

function doSomethingElse(anotherObject) { 
    //some more code here 
    if (somethingMatches) { 
    //here i would like to break the most upper loop 
    } 
} 

//someObjects will be processed 

我知道,這將是可能引入例如布爾變量和內環路檢查它是否是真的還是假的,並取決於,break;continue;
但是,即使它只是一條線,也會增加嵌套。你看到任何可能的解決方案?

+0

你可以設置一個全局布爾等於假,將其設置爲true在你的函數,並檢查每個迭代如果布爾值爲true。 – AppleCrazy

+0

你可以嘗試在for循環之外移動迭代器,當'somethingMatches'時,將它設置爲'someObjects.length',以便它移出循環..(只是一個念頭,從未這樣做過) – gkb

+0

@AppleCrazy Exactly ,但正如我所提到的那樣會增加for循環中的嵌套。我知道我可以做到這一點,但我想問問是否有辦法避免嵌套。 – bash0ne

回答

0

如果您使用的是Underscore library,我建議,你可以寫:

_.any(someObjects, doSomething); 

function doSomething(object) { 
    //some code here 
    return somethingIsDefined && 
    doSomethingElse(object); 
} 

function doSomethingElse(anotherObject) { 
    //some more code here 
    return somethingMatches; 
}