我有一个角foreach循环,我想打破循环,如果我匹配一个值。下面的代码不能工作。
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
我怎样才能得到这个?
我有一个角foreach循环,我想打破循环,如果我匹配一个值。下面的代码不能工作。
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
我怎样才能得到这个?
当前回答
试试这个作为休息;
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
只需添加$index并执行以下操作:
angular.forEach([0,1,2], function(count, $index) {
if($index !== 1) {
// do stuff
}
}
$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;
});
}
通常在javascript中没有办法打破“each”循环。 通常能做的是使用“短路”法。
array.forEach(函数(项){ //如果条件不满足,则继续进行下一轮迭代。 If (!condition)返回; //如果条件满足,在这里做你的逻辑 console.log(“做东西。”) }
我会用return代替break。
angular.forEach([0,1,2], function(count){
if(count == 1){
return;
}
});
效果非常好。