264

角度のある foreach ループがあり、値に一致する場合はループから抜けたいと思っています。次のコードは機能しません。

angular.forEach([0,1,2], function(count){
  if(count == 1){
    break;
  }
});

どうすればこれを入手できますか?

4

21 に答える 21

302

angular.forEach条件一致でループを中断することはできません。

私の個人的なアドバイスは、の代わりにNATIVE FORループを使用することですangular.forEach

NATIVE FOR ループは、他の for ループよりも約90%高速です。

for loop break , for loop test result

Angular での FOR ループの使用:

var numbers = [0, 1, 2, 3, 4, 5];

for (var i = 0, len = numbers.length; i < len; i++) {
  if (numbers[i] === 1) {
    console.log('Loop is going to break.'); 
    break;
  }
  console.log('Loop will continue.');
}
于 2013-10-17T11:08:46.703 に答える
275

これを行う方法はありません。https://github.com/angular/angular.js/issues/263を参照してください。あなたがしていることに応じて、ブール値を使用してループの本体に入らないようにすることができます。何かのようなもの:

var keepGoing = true;
angular.forEach([0,1,2], function(count){
  if(keepGoing) {
    if(count == 1){
      keepGoing = false;
    }
  }
});
于 2012-12-12T16:45:21.597 に答える
19

Array Some メソッドを使用する

 var exists = [0,1,2].some(function(count){
      return count == 1
 });

exists は true を返し、これを関数内の変数として使用できます

if(exists){
    console.log('this is true!')
}

Array Some メソッド - Javascript

于 2013-11-01T23:06:10.827 に答える
6

具体的には、forEachループを終了し、どこからでも例外をスローできます。

try {
   angular.forEach([1,2,3], function(num) {
      if (num === 2) throw Error();
   });
} catch(e) {
    // anything
}

ただし、他のライブラリを使用するか、独自の関数find(この場合は関数) を実装する方が良いため、コードは最も高レベルです。

于 2015-07-15T16:50:16.093 に答える
6

私の知る限り、Angular はそのような機能を提供していません。これにはアンダースコアの関数を使用することをお勧めしますfind()(これは基本的に、関数が true を返すとループから抜け出す forEach です)。

http://underscorejs.org/#find

于 2012-12-12T16:33:55.263 に答える
3

他の回答が述べているように、Angular はこの機能を提供していません。ただし、jQuery はそうです。jQuery と Angular をロードした場合は、次を使用できます。

jQuery.each ( array, function ( index, value) {
    if(condition) return false; // this will cause a break in the iteration
})

http://api.jquery.com/jquery.each/を参照してください。

于 2015-09-11T14:45:33.917 に答える
2

これを使用できます:

var count = 0;
var arr = [0,1,2];
for(var i in arr){
   if(count == 1) break;
   //console.log(arr[i]);
}
于 2016-06-23T08:32:51.040 に答える
2

breakangular forEach で達成することはできません。それを行うには、forEach を変更する必要があります。

$scope.myuser = [{name: "Ravi"}, {name: "Bhushan"}, {name: "Thakur"}];  
                angular.forEach($scope.myuser, function(name){
                  if(name == "Bhushan") {
                    alert(name);
                    return forEach.break(); 
                    //break() is a function that returns an immutable object,e.g. an empty string
                  }
                });
于 2015-09-23T11:13:07.023 に答える
1
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];
var keepGoing = true;
ary.forEach(function(value, index, _ary) {
    console.log(index)
    keepGoing = true;
    ary.forEach(function(value, index, _ary) {
        if(keepGoing){ 
            if(index==2){
                keepGoing=false;
            }
            else{
                console.log(value)
            }

        }      
    });
});
于 2015-08-07T07:31:39.613 に答える
0

私はこれをお返しにしたいと思います。ループ部分をprivate関数に入れて、ループを壊したいときに戻る。

于 2016-09-02T04:43:39.710 に答える
0

これは古いと思いますが、配列フィルターは必要なことを行うことができます:

var arr = [0, 1, 2].filter(function (count) {
    return count < 1;
});

arr.forEachその後、他の配列関数を実行できます。

ループ操作を完全に削減するつもりなら、これはおそらくあなたが望むことにはならないでしょう。そのためには、を使用するのが最適whileです。

于 2017-01-19T12:04:49.340 に答える
0

Return を使用してループを中断します。

angular.forEach([0,1,2], function(count){
  if(count == 1) {
    return;
  }
});
于 2019-08-01T05:34:10.127 に答える