2016-11-17 15 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;
しかし、これが単なる1行であっても、入れ子が増えます。可能な解決策はありますか?あなたは、私がお勧めUnderscore libraryを、使用している場合は、次のように書くことができ

+0

あなたは、偽に等しいグローバルなブール値を設定し、あなたの関数でtrueに等しい、それを設定し、各反復をチェックすることができますbooleanがtrueの場合 – AppleCrazy

+0

iteratorをforループの外に移動し、 'somethingMatches'が' someObjects.length'に設定されてループから外れるようにしてみることができます(ちょっと考えました、決してそうしませんでした) – gkb

+0

@AppleCrazyまさにしかし、私が言及したように、それはforループ内の入れ子を増やすでしょう。私はこれを行うことができることを知っていますが、私は入れ子を避ける方法があるかどうか尋ねたいと思っていました。 – bash0ne

答えて

0

_.any(someObjects, doSomething); 

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

function doSomethingElse(anotherObject) { 
    //some more code here 
    return somethingMatches; 
} 
関連する問題