Angular JS打破ForEach

我有一个角foreach循环,我想打破循环,如果我匹配一个值。下面的代码不能工作。

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

我怎样才能得到这个?

360252 次浏览

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

< a href = " http://underscorejs.org/找到" > http://underscorejs.org/找到< / >

这是不可能的。看到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

原生FOR循环围绕90%的速度比其他FOR循环快。

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

使用Array Some方法

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

Exists将返回true,您可以将其用作函数中的变量

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

Array Some Method - Javascript

如果你将jQuery(而不是jqLite)与AngularJS结合使用,你可以使用$进行迭代。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还不错,但是MDN推荐使用本机Array.someArray.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

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

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

请使用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/ < / p >

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

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

然而,如果你使用其他库或实现你自己的函数(在这种情况下是find函数)会更好,所以你的代码是最高级别的。

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


}
});
});

正如其他答案所说,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/

break在angular 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
}
});
在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.')
}

你可以用这个:

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

我更喜欢用return来做。将循环部分放在私有函数中,并在想要打破循环时返回。

这个例子有用。试一试。

var array = [0,1,2];
for( var i = 0, ii = array.length; i < ii; i++){
if(i === 1){
break;
}
}

我知道这是旧的,但数组过滤器可以满足你的需要:

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

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

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

试试这个作为休息;

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

我将使用return而不是break

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

效果非常好。

使用Return打破循环。

angular.forEach([0,1,2], function(count){
if(count == 1) {
return;
}
});
onSelectionChanged(event) {
let selectdata = event['api']['immutableService']['gridOptionsWrapper']['gridOptions']['rowData'];
let selected_flag = 0;


selectdata.forEach(data => {
if (data.selected == true) {
selected_flag = 1;
}
});


if (selected_flag == 1) {
this.showForms = true;
} else {
this.showForms = false;
}
}