角JS休息的ForEach(Angular JS break ForEach)

2019-07-05 01:47发布

我有一个角foreach循环,我想从回路断线,如果我的值相匹配。 下面的代码无法正常工作。

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

我怎样才能得到呢?

Answer 1:

有没有办法做到这一点。 见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;
    }
  }
});


Answer 2:

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.');
}


Answer 3:

请使用的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/



Answer 4:

使用Array某种方法

 var exists = [0,1,2].some(function(count){
      return count == 1
 });

存在将返回true,你可以用这个作为你的函数变量

if(exists){
    console.log('this is true!')
}

阵列的一些方法-使用Javascript



Answer 5:

据我所知,角不提供这样的功能。 您可能希望使用下划线的find()函数这个(它基本上打破了一次循环,函数返回true的一个foreach)。

http://underscorejs.org/#find



Answer 6:

如果您在使用AngularJS结合使用jQuery(因此不jqLit​​e),你可以用$。每次迭代 - 这使得破并继续基于布尔返回值表达式。

的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


Answer 7:

具体而言,你可以退出的forEach循环,任何地方,抛出异常。

try {
   angular.forEach([1,2,3], function(num) {
      if (num === 2) throw Error();
   });
} catch(e) {
    // anything
}

但是,它是更好,如果你使用其他库或实现自己的功能, find在这种情况下功能,让你的代码是最高层。



Answer 8:

至于其他的答案状态,角不提供此功能。 然而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/



Answer 9:

正常情况下没有办法突破在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.') } 



Answer 10:

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
                  }
                });


Answer 11:

您可以使用此:

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


Answer 12:

试试这个为突破;

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


Answer 13:

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)
            }

        }      
    });
});


Answer 14:

$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;
     });
 }


Answer 15:

我宁愿用回做到这一点。 把循环部分私有函数,当你想打破循环返回。



Answer 16:

我意识到这是旧的,但一个滤镜阵列可以做你的需要:

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

然后,您可以运行arr.forEach等阵列功能。

我意识到,如果你打算干脆削减循环操作,这可能不是你想要什么。 对于您最好使用while



Answer 17:

此示例适用。 试试吧。

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


Answer 18:

我会用return ,而不是break

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

奇迹般有效。



Answer 19:

只需添加$指数并执行以下操作:

angular.forEach([0,1,2], function(count, $index) {
     if($index !== 1) {
          // do stuff
     }
}


文章来源: Angular JS break ForEach