我有一个角度foreach循环,如果我匹配一个值,我想摆脱循环。以下代码不起作用。
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
我怎么能得到这个?
我有一个角度foreach循环,如果我匹配一个值,我想摆脱循环。以下代码不起作用。
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
我怎么能得到这个?
Answers:
没有办法做到这一点。见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;
}
}
});
!keepGoing && return;
在函数顶部添加一个,减少代码。
该angular.forEach
循环不能在条件匹配打破。
我的个人建议是使用NATIVE FOR循环而不是angular.forEach
。
NATIVE FOR循环比其他for循环快90%。
在语言中使用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.');
}
请使用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,您可以将其用作函数中的变量
if(exists){
console.log('this is true!')
}
angular.forEach()
是我必须支持IE8,而后者没有Array.forEach()
...或Array.some()
。
据我所知,Angular没有提供这样的功能。您可能需要为此使用下划线find()
功能(基本上是forEach,一旦该函数返回true,它就会退出循环)。
如果将jQuery(因此不是jqLite)与AngularJS结合使用,则可以使用$ .each进行迭代-允许基于布尔返回值表达式进行中断和继续。
JSFiddle:
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.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
具体来说,您可以退出forEach
循环,并且可以在任何地方引发异常。
try {
angular.forEach([1,2,3], function(num) {
if (num === 2) throw Error();
});
} catch(e) {
// anything
}
但是,最好使用其他库或实现自己的find
函数(在这种情况下为函数),因此代码是最高级的。
正如其他答案所述,Angular不提供此功能。jQuery可以,但是如果您已经加载了jQuery和Angular,则可以使用
jQuery.each ( array, function ( index, value) {
if(condition) return false; // this will cause a break in the iteration
})
通常,没有办法打破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.')
}
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,e.g. an empty string
}
});
break()
需要定义,或者是否已经是角度的一部分。请定义是否。
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)
}
}
});
});
$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 array = [0,1,2];
for( var i = 0, ii = array.length; i < ii; i++){
if(i === 1){
break;
}
}
for
循环,他的用例需要foreach
不是一个for
可能
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;
}
}
我会用return
代替break
。
angular.forEach([0,1,2], function(count){
if(count == 1){
return;
}
});
奇迹般有效。