Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   прерывание цикла (https://javascript.ru/forum/misc/31432-preryvanie-cikla.html)

9112 07.09.2012 13:17

прерывание цикла
 
имеем код:
Код:

for (...) {
if (...) {
...
break;}
}

должен ли в данном случае прерываться цикл после выполнения условия if?

bes 07.09.2012 13:23

а проверить

9112 07.09.2012 14:00

да. прерывается. голова не варит, прошу прощения.
в связи с этим возникает немного иной вопрос
имеем код:
Код:

for (var i=0; i<db.length; i++){
        if (db[i]['id']==parseInt(value)){
            console.log(db[i]);
            return db[i];
            break;
        }
        else {
            for (i=0; i<db.length; i++){
                if (db[i]['id']==view_foto){
                    console.log(db[i]);
                    return db[i];
                    break;
                }
            }
        }
    }

принцип работы - получаем id текущей фотографии. передаем его вышеописанной функции, она проходит по массиву и ищет данный id, после чего возвращает данный элемент массива. в случае, если не находит - срабатывает условие else и возвращает элемент массива, где id==view_foto.
проблема в том, что в массиве не находит передаваемого функции id(хотя он там есть), и переходит к else. если мы за комментируем блок else - все начинает работать.
пока сделал следующим образом, но хочется разобраться, почему вышеописанный вариант не работает..
Код:

var out;
    for (var i=0; i<db.length; i++){
        if (db[i]['id']==parseInt(value)){
            console.log(db[i]);
            out=db[i];
            break;
        }
    }
    if (out==null)
        for (i=0; i<db.length; i++){
            if (db[i]['id']==view_foto){
                console.log(db[i]);
                out=db[i];
                break;
            }
        }
    return out;


bes 07.09.2012 14:25

выложите тестовый пример, для оформления c возможностью просмотра используйте bb-теги [html run]


return приводит к выходу из функции

tadjik1 07.09.2012 14:49

это ппц что за код)

1. не перебирайте массив так часто. переберите один раз, и сделайте нужный вам хэшик с ключами, подходящими под условие.
2. return и break прерывают исполнение цикла. если вам нужно только пропустиьт итерацию используйте continue. ну и вместо return что-нибудь.

9112 07.09.2012 15:57

да, начал в отдельный файл выносить кусок кода и уткнулся - при первой же итерации, не удовлетворяющей первому условию у нас прерывается цикл и возвращает значение, связанное с view_foto :)

и да, приобрел такой вид:
Код:

var tmp;
for (var i=0; i<db.length; i++){
        if (tmp==null & db[i]['id']==view_foto){
            tmp=db[i];
        }
        if (db[i][key]==value){
            console.log(db[i]);
            return db[i];
        }
        else if (i==db.length-1) return tmp;
    }



Часовой пояс GMT +3, время: 05:08.