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

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

我怎样才能得到这个?


当前回答

试试这个作为休息;

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

其他回答

你可以用这个:

var count = 0;
var arr = [0,1,2];
for(var i in arr){
   if(count == 1) break;
   //console.log(arr[i]);
}

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

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

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

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

试试这个作为休息;

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

如果你将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

这个例子有用。试一试。

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