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

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

我怎样才能得到这个?


当前回答

如果你将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还不错,但都是原生数组。some或Array。每个函数都是MDN推荐的,你可以在原生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

其他回答

通常在javascript中没有办法打破“each”循环。 通常能做的是使用“短路”法。

array.forEach(函数(项){ //如果条件不满足,则继续进行下一轮迭代。 If (!condition)返回; //如果条件满足,在这里做你的逻辑 console.log(“做东西。”) }

如果你将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还不错,但都是原生数组。some或Array。每个函数都是MDN推荐的,你可以在原生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
$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;
     });
 }

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

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

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

我意识到,如果你打算完全减少循环操作,这可能不会达到你想要的效果。所以你最好趁现在。

使用Return打破循环。

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