Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.09.2012, 13:17
Интересующийся
Отправить личное сообщение для 9112 Посмотреть профиль Найти все сообщения от 9112
 
Регистрация: 01.06.2012
Сообщений: 25

прерывание цикла
имеем код:
Код:
for (...) {
if (...) {
...
break;}
}
должен ли в данном случае прерываться цикл после выполнения условия if?
Ответить с цитированием
  #2 (permalink)  
Старый 07.09.2012, 13:23
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

а проверить
Ответить с цитированием
  #3 (permalink)  
Старый 07.09.2012, 14:00
Интересующийся
Отправить личное сообщение для 9112 Посмотреть профиль Найти все сообщения от 9112
 
Регистрация: 01.06.2012
Сообщений: 25

да. прерывается. голова не варит, прошу прощения.
в связи с этим возникает немного иной вопрос
имеем код:
Код:
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;

Последний раз редактировалось 9112, 07.09.2012 в 14:03.
Ответить с цитированием
  #4 (permalink)  
Старый 07.09.2012, 14:25
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

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


return приводит к выходу из функции
Ответить с цитированием
  #5 (permalink)  
Старый 07.09.2012, 14:49
Профессор
Отправить личное сообщение для tadjik1 Посмотреть профиль Найти все сообщения от tadjik1
 
Регистрация: 07.06.2011
Сообщений: 315

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

1. не перебирайте массив так часто. переберите один раз, и сделайте нужный вам хэшик с ключами, подходящими под условие.
2. return и break прерывают исполнение цикла. если вам нужно только пропустиьт итерацию используйте continue. ну и вместо return что-нибудь.
Ответить с цитированием
  #6 (permalink)  
Старый 07.09.2012, 15:57
Интересующийся
Отправить личное сообщение для 9112 Посмотреть профиль Найти все сообщения от 9112
 
Регистрация: 01.06.2012
Сообщений: 25

да, начал в отдельный файл выносить кусок кода и уткнулся - при первой же итерации, не удовлетворяющей первому условию у нас прерывается цикл и возвращает значение, связанное с 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;
    }

Последний раз редактировалось 9112, 07.09.2012 в 16:04.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
необходими разделить строку на слова и положить слова в массив при помощи цикла for oneee Общие вопросы Javascript 5 05.09.2012 14:30
Логика действий на примере цикла for ufaset Общие вопросы Javascript 1 27.11.2011 22:04
Как взятые данные с цикла присоединить к одной переменной ? saturn Элементы интерфейса 2 25.11.2011 13:01
Как приостановить выполнение цикла? SashaBorandi jQuery 3 13.02.2009 08:57
как отобразить в окне значения счетчика во время выполнения цикла FOR Алекс97 Общие вопросы Javascript 5 06.09.2008 10:36