我有一个角foreach循环,我想从回路断线,如果我的值相匹配。 下面的代码无法正常工作。
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
我怎样才能得到呢?
我有一个角foreach循环,我想从回路断线,如果我的值相匹配。 下面的代码无法正常工作。
angular.forEach([0,1,2], function(count){
if(count == 1){
break;
}
});
我怎样才能得到呢?
有没有办法做到这一点。 见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
循环不能在条件匹配打破。
我个人的建议是使用原生FOR循环,而不是angular.forEach
。
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/
使用Array某种方法
var exists = [0,1,2].some(function(count){
return count == 1
});
存在将返回true,你可以用这个作为你的函数变量
if(exists){
console.log('this is true!')
}
阵列的一些方法-使用Javascript
据我所知,角不提供这样的功能。 您可能希望使用下划线的find()
函数这个(它基本上打破了一次循环,函数返回true的一个foreach)。
http://underscorejs.org/#find
如果您在使用AngularJS结合使用jQuery(因此不jqLite),你可以用$。每次迭代 - 这使得破并继续基于布尔返回值表达式。
的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也不错,无论是本地Array.some或Array.every功能由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
具体而言,你可以退出的forEach
循环,任何地方,抛出异常。
try {
angular.forEach([1,2,3], function(num) {
if (num === 2) throw Error();
});
} catch(e) {
// anything
}
但是,它是更好,如果你使用其他库或实现自己的功能, find
在这种情况下功能,让你的代码是最高层。
至于其他的答案状态,角不提供此功能。 然而jQuery不会的,如果你已加载的jQuery以及角度,你可以使用
jQuery.each ( array, function ( index, value) {
if(condition) return false; // this will cause a break in the iteration
})
见http://api.jquery.com/jquery.each/
正常情况下没有办法突破在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
}
});
您可以使用此:
var count = 0;
var arr = [0,1,2];
for(var i in arr){
if(count == 1) break;
//console.log(arr[i]);
}
试试这个为突破;
angular.forEach([0,1,2], function(count){
if(count == 1){
return true;
}
});
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 arr = [0, 1, 2].filter(function (count) {
return count < 1;
});
然后,您可以运行arr.forEach
等阵列功能。
我意识到,如果你打算干脆削减循环操作,这可能不是你想要什么。 对于您最好使用while
。
此示例适用。 试试吧。
var array = [0,1,2];
for( var i = 0, ii = array.length; i < ii; i++){
if(i === 1){
break;
}
}
我会用return
,而不是break
。
angular.forEach([0,1,2], function(count){
if(count == 1){
return;
}
});
奇迹般有效。
只需添加$指数并执行以下操作:
angular.forEach([0,1,2], function(count, $index) {
if($index !== 1) {
// do stuff
}
}