2016-03-21 6 views
0

私はいくつかの助けが必要です。 2つのレコードのリストをトラバースする2つのループがあります。問題は、最後のループが私が探している価値を押しつぶすため、ある時点では何かを置くべきだということです。壊れてforEachとangularJS

これは、私のコードユーザ4及びユーザ5が「たぶん利用可能」と「使用不可」にする必要がありますが、このコードで、私は「ユーザー0、1のために利用可能な取得しています

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'; 
         }      
       } 

      } 

です2,3、そして最後のもの。そして、最後のものは他人と一緒に崩壊する。

私はうまく説明したいと思います。

ありがとうございました

答えて

0

よう

何か。

ワンサイドノート:あなたは配列のプロパティを繰り返し処理(および予期しない値をとるi持っている)可能性があるので、あなたがfor (var i in array) {}を使用する必要はありません。 コードをより信頼性の高い反復で更新しました。

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'; 
    } 
    } 

} 

EDIT$scope.users$scope.statesは配列ではなく、実際には(私には奇妙に思えるが、とにかくと思われる)オブジェクト、あなたはfor (var i in object) {}を保つことができますが、チェックを追加する必要がある場合は、次のループでif (object.hasOwnProperty(i)) {}を。

0

あなたが希望する値を得たときに真となるフラグを追加することができます。あなたが実行されたときにループを終了しますbreakキーワードを使用することができます

   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; 
         }      
       } 

} 

      } 
0

AngularJSでは、ループなどの中断がないため、ロジックを手動で実行する必要があります。

同様のケースが実証されているhere

ここでは、最初にfalseに設定された変数fを作成しました。 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>'); 
      } 
    }); 
    }); 
関連する問題