私は角度付きのforeachループを持っています、そして私が値にマッチするならば、私はループから抜けたいです。次のコードは機能しません。
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
どうやってこれを入手できますか?
これを行う方法はありません。 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;
}
}
});
angular.forEach
ループは条件が一致したときに中断することはできません。
私の個人的なアドバイスはangular.forEach
の代わりに NATIVE FOR ループを使うことです。
NATIVE FORループは他のforループよりもおよそ 90% 速いです。
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.');
}
forEachの一部またはすべてのインスタンスを使用してください。
Array.prototype.some:
some is much the same as forEach but it break when the callback returns true
Array.prototype.every:
every is almost identical to some except it's expecting false to break the loop.
いくつかの例:
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];
ary.some(function (value, index, _ary) {
console.log(index + ": " + value);
return value === "JavaScript";
});
すべての例:
var ary = ["JavaScript", "Java", "CoffeeScript", "TypeScript"];
ary.every(function(value, index, _ary) {
console.log(index + ": " + value);
return value.indexOf("Script") > -1;
});
もっと情報を探す
http://www.jsnoob.com/2013/11/26/how-to-break-the-foreach/
いくつかの方法で配列を使用する
var exists = [0,1,2].some(function(count){
return count == 1
});
existsはtrueを返すので、これを関数内の変数として使用できます。
if(exists){
console.log('this is true!')
}
私の知る限り、Angularはそのような機能を提供していません。あなたはこれのためにアンダースコアのfind()
関数を使うことを望むかもしれません(それは基本的に関数がtrueを返すとループから抜け出すforEachです)。
具体的には、forEach
ループを終了することができます。また、あらゆる場所で例外をスローすることができます。
try {
angular.forEach([1,2,3], function(num) {
if (num === 2) throw Error();
});
} catch(e) {
// anything
}
ただし、他のライブラリを使用するか、独自の関数(この場合はfind
関数)を実装したほうが良いため、コードは最も高水準です。
AngularJSと組み合わせてjQuery(したがってjqLiteではない)を使用する場合は、$ .eachを使用して反復することができます。これにより、ブール値の戻り値式に基づいて分割して続行できます。
JSFiddle:
http://jsfiddle.net/JEcD2/1/ /
Javascript:
var array = ['foo', 'bar', 'yay'];
$.each(array, function(index, element){
if (element === 'foo') {
return true; // continue
}
console.log(this);
if (element === 'bar') {
return false; // break
}
});
注:
JQueryを使用することは悪くありませんが、native forEach documentationで読むことができるように、native Array.some または Array.every 関数の両方がMDNによって推奨されます。
「forEachループを停止または中断する方法はありません。解決策はArray.everyまたはArray.someを使用することです」
以下の例がMDNによって提供されています。
Array.some:
function isBigEnough(element, index, array){
return (element >= 10);
}
var passed = [2, 5, 8, 1, 4].some(isBigEnough);
// passed is false
passed = [12, 5, 8, 1, 4].some(isBigEnough);
// passed is true
Array.every:
function isBigEnough(element, index, array){
return (element >= 10);
}
var passed = [12, 5, 8, 130, 44].every(isBigEnough);
// passed is false
passed = [12, 54, 18, 130, 44].every(isBigEnough);
// passed is true
他の回答者が述べているように、Angularはこの機能を提供していません。しかしjQueryはそうします、そしてあなたがAngularと同様にjQueryをロードしたならば、あなたは使うことができます
jQuery.each ( array, function ( index, value) {
if(condition) return false; // this will cause a break in the iteration
})
http://api.jquery.com/jquery.each/ を参照してください。
通常、JavaScriptで "each"ループを中断する方法はありません。通常できることは「短絡」方式を使用することです。
array.forEach(function(item) {
// if the condition is not met, move on to the next round of iteration.
if (!condition) return;
// if the condition is met, do your logic here
console.log('do stuff.')
}
break
は、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
}
});
これを使うことができます:
var count = 0;
var arr = [0,1,2];
for(var i in arr){
if(count == 1) break;
//console.log(arr[i]);
}
これを休憩として試してください。
angular.forEach([0,1,2], function(count){
if(count == 1){
return true;
}
});
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)
}
}
});
});
私はこれが古くなっていることを認識しています、しかし配列フィルタはあなたが必要とすることをするかもしれません:
var arr = [0, 1, 2].filter(function (count) {
return count < 1;
});
arr.forEach
や他の配列関数を実行することができます。
あなたがループ操作を完全に削減しようとするなら、これはおそらくあなたが望むことをしないだろうことを私は理解しています。そのためにはwhile
を使うのが一番です。
Returnを使用してループを中断します。
angular.forEach([0,1,2], function(count){
if(count == 1) {
return;
}
});
私はreturn
の代わりにbreak
を使います。
angular.forEach([0,1,2], function(count){
if(count == 1){
return;
}
});
魅力のように働きます。
この例はうまくいきます。それを試してみてください。
var array = [0,1,2];
for( var i = 0, ii = array.length; i < ii; i++){
if(i === 1){
break;
}
}
$scope.arr = [0, 1, 2];
$scope.dict = {}
for ( var i=0; i < $scope.arr.length; i++ ) {
if ( $scope.arr[i] == 1 ) {
$scope.exists = 'yes, 1 exists';
break;
}
}
if ( $scope.exists ) {
angular.forEach ( $scope.arr, function ( value, index ) {
$scope.dict[index] = value;
});
}
私はこれを見返りにしたいと思います。ループ部分をprivate関数にして、ループを中断したいときに戻ってください。