2016-03-21 2 views
0

Я пробовал использовать инструкцию break. но не получилось. Я хотел вырваться из внешнего цикла, как только какое-то условие будет соответствовать внутреннему циклу.Угловой: как прорваться из внешней петли из внутренней петли?

 angular.forEach(myfilejob, function(fieldMapO) { 
        var count = 0; 
        angular.forEach(myfilejob, function(fieldMapI) { 
         if(fieldMapO.key == fieldMapI.key){ 
          $scope.dupKey = fieldMapI.key; 
          count ++; 
         } 
        }); 

        if(count>1){ 
         $scope.dups = true; 
         // tried break , but didnt work 

        } 
        else{ 
         $scope.dups = false; 
        } 

       }); 
+0

Вообще говоря, вызовы 'forEach' с функцией вам нужно «вернуть false» (или какое-то другое значение), чтобы сообщить итератору о выходе. Я не могу себе представить, что угловые выполняются иначе. –

+0

'angular.forEach' не поддерживает инструкцию' break; ', чтобы получить ее поддержку, вам нужно отбросить старую версию, простую для цикла. –

+0

Почему вы перебираете один и тот же набор данных для каждой части данных в указанном наборе? конечно, есть лучший способ, –

ответ

0

Вы можете использовать возврат, который существенно выйдет из цикла. Если вы хотите сделать это во внутреннем цикле, установите значение boolean в true и проверьте его во внешнем цикле.

var dupsExist = false; 
angular.forEach(myfilejob, function(fieldMapI) { 
    if(fieldMapO.key == fieldMapI.key){ 
     $scope.dupKey = fieldMapI.key; 
     dupsExist = true; 
     return; 
    } 
}); 
if (dupsExist){ 
    return; 
} 
0

Я предлагаю вам определить логическое значение, когда ваше внутреннее условие

angular.forEach(myfilejob, function(fieldMapO) { 
       var count = 0; 
       var conditionFlag = false; 
       angular.forEach(myfilejob, function(fieldMapI) { 
        if(fieldMapO.key == fieldMapI.key){ 
         $scope.dupKey = fieldMapI.key; 
         count ++; 
         //condition is fulfilled so boolean is true now 
         conditionFlag = true 
         return false 
        } 
       }); 


       if(count>1){ 
        $scope.dups = true; 

       } 
       else{ 
        $scope.dups = false; 
       } 
       //check if condition is satisfied then exit outer loop too 
       if(conditionFlag){ 
        return false; 
       } 
      }); 

Надеется, что это помогает

2

При использовании forEach, нет никакого способа, чтобы сделать паузу итерации - даже с помощи return. Если вы хотите остановить итерацию в середине цикла, вы должны использовать фактический цикл for или while (возможно, что-то вроде for..in или for..of или традиционный цикл с тремя операторами for(var i = 0; i < whatever; i++, если myfilejob - это массив).

Однако, как только вы сделаете это, вы можете label петлю, чтобы получить точный эффект, который вы ищете:

outerDupLoop: 
for (var outerIndex in myfilejob) { 
    var fieldMapO = myfilejob[outerIndex]; 
    var count = 0; 
    innerDupLoop: 
    for (var innerIndex in myfilejob) { 
     var fieldMapI = myfilejob[innerIndex]; 
     if(fieldMapO.key == fieldMapI.key){ 
      $scope.dupKey = fieldMapI.key; 
      count ++; 
     } 
    }); 

    if(count>1){ 
     $scope.dups = true; 
     break outerDupLoop; // break from the outer loop 
    } else { 
     $scope.dups = false; 
    } 
} 

(не важно, что заявление перерыва вы пытаетесь добавить было внешняя петля в любом случае - удаление меток из этого примера сделает это функционально эквивалентным. Вы имели в виду рефакторинг проверки (count > 1), чтобы он работал правильно внутри внутреннего цикла?)

+0

Да, я согласен. Я выбрал то же самое, и это сработало. благодаря – JOGO

Смежные вопросы