Angular JS打破ForEach

我有一个angular度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循环在条件匹配时不能中断。

我的个人build议是使用NATIVE FOR循环而不是angular.forEach

NATIVE FOR循环比其他循环快90%左右。

用于循环中断,用于循环测试结果

用于循环的angular度:

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

存在将返回true,您可以将其用作函数中的variables

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

数组的一些方法 – Javascript

具体地说,你可以退出forEach循环,并且在任何地方抛出exception。

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

但是,如果使用其他库或者实现自己的函数(在这种情况下是find函数),那么代码是最高级的。

据我所知,Angular不提供这样的function。 你可能需要使用下划线的find()函数(它基本上是一个forEach,一旦函数返回true就跳出循环)。

http://underscorejs.org/#find

如果您将jQuery(因此不是jqLit​​e)与AngularJS结合使用,则可以使用$ .each进行迭代 – 这允许基于布尔返回值expression式进行中断和继续。

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

注意:

尽pipe使用jQuery并不差,但MDNbuild议使用本地Array.some或Array.every函数,因为您可以在本地forEach文档中阅读这些函数:

“没有办法停止或打破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不提供这个function。 不过,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/

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,eg an empty string } }); 

通常情况下,没有办法在JavaScript中打破“每个”循环。 通常可以做的是使用“短路”方法。

  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.') } 

你可以使用这个:

 var count = 0; var arr = [0,1,2]; for(var i in arr){ if(count == 1) break; //console.log(arr[i]); } 
 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 array = [0,1,2]; for( var i = 0, ii = array.length; i < ii; i++){ if(i === 1){ break; } } 

试试这个rest;

 angular.forEach([0,1,2], function(count){ if(count == 1){ return true; } }); 
 $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; }); } 

我宁愿这样做,通过回报。 将循环部分放在私有函数中,并在要打破循环时返回。

我意识到这是旧的,但一个数组filter可能会做你所需要的:

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

然后你可以运行arr.forEach和其他数组函数。

我意识到,如果你打算完全减less循环操作,这可能不会做你想要的。 为此,你最好使用。

只需添加$ index并执行以下操作:

 angular.forEach([0,1,2], function(count, $index) { if($index !== 1) { // do stuff } }