Подтвердить что ты не робот

Как выйти из .each() и вернуть значение для функции

Я хочу использовать return false для разрыва .each(), но также возвращать значение в одно и то же время. Как я могу это сделать?

Пожалуйста, обратитесь к функции рабочего процесса, чтобы увидеть, что я пытаюсь сделать:

function HasStores(state) {
    var statehasstores = false;


    $(stores).each(function (index, store){
        if(state == store.state && store.category == "meyers"){
            statehasstores = true;
            return false; //break
        }
    });


    return statehasstores;
}

Какой идентификатор нравится в псевдокоде:

Function () {
    for() {
        if found {
            return true;
        }   
    }
    return false;
}
4b9b3361

Ответ 1

Вы делаете это правильно...

Цитата из http://api.jquery.com/each/

"Мы можем остановить цикл из функции обратного вызова, вернув false."

Ответ 2

Сделайте объявление:

try {
  $(stores).each(function (index, store) {
    if(state == store.state && store.category == "meyers"){
      throw store;
    }
  });
}
catch(e) {
  // you got e with the value
}

Нет, я просто шутил, не использую это:). Это была идея, которую мне нравилось делиться.

Ответ 3

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

var value;

$(stores).each(function (index, store) {
    if(state == store.state && store.category == "meyers"){
        statehasstores = true;
        value = store; // added line
        return false; //break
    }
});

alert(value);

То, как вы делаете, прекрасно. Я тестировал jsFiddle, см. пример здесь.

Это не работает для вас? Вы можете показать больше контекста?

Ответ 4

В качестве альтернативы вы можете использовать цикл for вместо each() и просто вернуть значение.

Ответ 5

То, что вы предлагаете, это способ сделать это. Я бы подумал об этом менее как обходной путь и более как о идиоме.

Ответ 6

Хорошо, я думаю, там немного сомневается в этом вопросе, поэтому, возможно, я разъясняю здесь:

  • Когда jquery doc говорит: "Мы можем остановить цикл из функции обратного вызова, вернув false". и вы делаете:

    Функция() { для() {   если найдено {       return true;   }
    } return false; }

Это не означает, что вы будете возвращать true при поиске искомого элемента. Вместо этого он всегда будет возвращать false.

Итак, чтобы ваша функция работала так, как вы предлагаете:

Function () {
   variable found = false;
foreach() {
    if found {
        found = true;
        return false; // This statement doesn't make your function return false but just cut the loop
    }   
}
return found;

}

Конечно, есть много других способов выполнить это, но я думаю, что это самый простой.

Coopa - Easy!

Ответ 7

Как отмечали другие jQuery Каждый, возвращающий false, будет только отрываться от цикла, а не возвращать значение, возвращая true, но будет продолжать 'и сразу же начните следующую итерацию. Благодаря этим знаниям вы можете несколько упростить свой код следующим образом:

function HasStores(state) {
  var statehasstores = false;

  $(stores).each(function (index, store){

    // continue or break;
    statehasstores = !(state == store.state && store.category == "meyers"))
    return statehasstores;
  });

  return !statehasstores;
}

Это, конечно, немного глупо, используя двойной отрицательный результат, и имеет побочный эффект сохранения "истины" в statehasstores для каждой ложной итерации и наоборот, однако конечный результат должен быть таким же, и вы больше не имеете этого, если утверждение.

Ответ 8

Как насчет:

$.each( myObj, function( key, value ){
  ...
  if( sthg... ){
    myObj.somethingWentHorriblyWrong = true;
    return false;
  }
});

if( myObj.somethingWentHorriblyWrong ){
  // ... do something, not forgetting to go:
  delete myObj.somethingWentHorriblyWrong;
}

PS Мне изначально интересовало, что действительно возвращает $.each(.... Как говорится на соответствующей странице JQ, "Метод возвращает свой первый аргумент, объект, который был итерирован", но на самом деле это решение не выполняется даже не требуйте, чтобы вы использовали этот факт...

PPS Нужна функция, возвращающая значение? Конечно, оберните внешнюю функцию.