Как выйти из цикла внутри функции в Javascript - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь выйти из вызова функции, когда найдено значение , и я не могу обернуться вокруг этого.

Используя отладчик, я заметил, что return found; строка заставляет выполнение перейти к концу функции, хорошо ... но после этого начинается другая итерация в цикле for.

Я тоже пытался использовать break.

Мой код ниже.

Отредактировано

Я проверил логику в отладчике, добавивточка останова на found = true, и она работает нормально, поэтому остается только то, что после этого она должна корректно завершиться ...

//  Tree traversal until answer found via answer.id

    function locateAnswer(wholeTree, answerID) {
      var found = false;
      if (wholeTree.answers) { // checks if next_queston is populated first

        for (var i = 0; i < wholeTree.answers.length; ++i) {        
          if (wholeTree.answers[i].id == answerID) {

            console.log("found!");
            found = true;
            return found;       // TRIED break; TOO

          } else {
            for (var j = 0; j < $scope.breadcrumbs.length; ++j) {
              if ($scope.breadcrumbs[j].question == wholeTree.question) {
                // if already exist, we pop elements until it does not exist anymore
                while ($scope.breadcrumbs[j]) {
                  $scope.breadcrumbs.pop();
                }
              }
            }

            // we push the new breadcrumb
            $scope.breadcrumbs.push({ "question": wholeTree.question, "answer": wholeTree.answers[i].answer });

            locateAnswer(wholeTree.answers[i].next_question, answerID);
          }
        }
      }
     //  ALSO TRIED return HERE AFTER break
    };

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вы должны использовать break внутри цикла и оператор возврата в конце функции.Пожалуйста обновленный код

function locateAnswer(wholeTree, answerID) {
      var found = false;
      if (wholeTree.answers) { // checks if next_queston is populated first

        for (var i = 0; i < wholeTree.answers.length; ++i) {        
          if (wholeTree.answers[i].id == answerID) {

            console.log("found!");
            var found = true;

          break;        // TRIED break; TOO

          } else {
            for (var j = 0; j < $scope.breadcrumbs.length; ++j) {
              if ($scope.breadcrumbs[j].question == wholeTree.question) {
                // if already exist, we pop elements until it does not exist anymore
                while ($scope.breadcrumbs[j]) {
                  $scope.breadcrumbs.pop();
                }
              }
            }

            // we push the new breadcrumb
            $scope.breadcrumbs.push({ "question": wholeTree.question, "answer": wholeTree.answers[i].answer });

            locateAnswer(wholeTree.answers[i].next_question, answerID);
          }
        }
      }
     //  ALSO TRIED return HERE AFTER break
 return found;
    };
0 голосов
/ 28 ноября 2018

Попробуйте использовать разрыв вместо возврата внутри цикла for

...