2016-11-17 11 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

Вы можете установить глобальное логическое значение, равное ложные, установите его равным верно в вашей функции, и проверить каждую итерацию если логическое значение истинно. – AppleCrazy

+0

вы можете попробовать переместить итератор за пределы цикла for, а когда 'somethingMatches', установите для' someObjects.length' так, чтобы он выходил из цикла. (Просто мысль, никогда не делала этого) – gkb

+0

@AppleCrazy Точно , но, как я уже говорил, увеличит вложенность внутри цикла 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; 
}