用angularJS打破forEach

时间:2016-03-21 12:59:07

标签: arrays angularjs loops

我需要一些帮助。我有2个循环来遍历两个记录列表。事情是,在某些时候应该休息一下,因为最后一个循环粉碎了我正在寻找的价值。

这是我的代码

  for (var i in $scope.users) { 
                for (var j in $scope.states) {
                    if ($scope.users[i].id === $scope.states[j].user) {
                        if ($scope.states[j].estado === 'totallyBussy') {
                            $scope.users[i].estado= 'Not available';


                        } else if ($scope.states[j].estado === 'partlyBussy') {
                            $scope.users[i].estado= 'Maybe available';

                        } 
                    }  
                    else {
                             $scope.users[i].estado= 'Available';
                        }                    
                }  

            }

用户4和用户5应该是'可用'和'不可用',但是使用此代码,我得到'可用于用户0,1,2,3和最后一个。而最后一个是与其他人粉碎。

我希望我能解释清楚。

非常感谢

3 个答案:

答案 0 :(得分:0)

你可以添加一个标志,当你得到你想要的值时,它会变为真。

类似

                var gotValue = false;

               for (var i in $scope.users) { 
               if(!gotValue)
                 {
                for (var j in $scope.states) {
                    if ($scope.users[i].id === $scope.states[j].user) {
                        if ($scope.states[j].estado === 'totallyBussy') {
                            $scope.users[i].estado= 'Not available';
               gotValue = true;


                        } else if ($scope.states[j].estado === 'partlyBussy') {
                            $scope.users[i].estado= 'Maybe available';
               gotValue = true;

                        } 
                    }  
                    else {
                             $scope.users[i].estado= 'Available';
                gotValue = true;
                        }                    
                }  

}

            }

答案 1 :(得分:0)

您可以使用break关键字,这将在执行时结束循环。

一方面注意:您不想使用 for (var i in array) {},因为您可能会遍历数组属性(并且i采用意外值)。 我用更可靠的迭代更新了你的代码。

for (var i = 0, il = $scope.users.length; i < il; i++) {
    var user = $scope.users[i];
  for (var j = 0, jl = $scope.states.length; j < jl; j ++) {
    var state = $scope.states[j];

    if (user.id === state.user) {

      if (state.estado === 'totallyBussy') {
        user.estado = 'Not available';
      } else if (state.estado === 'partlyBussy') {
        user.estado = 'Maybe available';
      }
      // Go to the next user (break the "states" loop)
      break;

    } else {
      user.estado = 'Available';
    }
  }

}

编辑:如果$scope.users$scope.states不是数组但实际上是对象(这对我来说似乎很奇怪),你可以保留for (var i in object) {}但是你必须在循环中添加一个检查:if (object.hasOwnProperty(i)) {}

答案 2 :(得分:0)

在AngularJS中,循环没有中断等,所以必须手动使用逻辑。

已经证明了类似的案例here

在这里,我创建了一个变量f,最初设置为false。在forEach循环中,根据条件,它会转到true,进一步作为break

请找到以下代码:

HTML:

  <div ng-app="app" ng-controller="test"></div>

JS:

  var app = angular.module('app',[]);

  app.controller ('test', function ($scope){
      var f = false;
      angular.forEach([1,2,3,4,5], function(v,k){
          if(k > 2){
             f = true;
          }
          if(!f) {
            document.write('value = ' + v + ' <br>');
          }
     });
  });