首页 文章

Angular JS打破了ForEach

提问于
浏览
239

我有一个角度的foreach循环,如果我匹配一个值,我想从循环中断 . 以下代码不起作用 .

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

我怎么能得到这个?

18 回答

  • 5

    据我所知,Angular没有这个函数(它基本上是一个forEach,一旦函数返回true就会突破循环) .

    http://underscorejs.org/#find

  • 248

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

    angular.forEach 循环在条件匹配时不会中断 .

    我个人的建议是使用 NATIVE FOR 循环而不是 angular.forEach .

    NATIVE FOR循环比其他循环快约 90% .

    For loop break , for loop test result

    USE FOR loop IN ANGULAR:

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

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

  • 282

    使用Array Some Method

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

    exists将返回true,您可以将其用作函数中的变量

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

    Array Some Method - Javascript

  • 1

    具体来说,您可以退出 forEach 循环,并在任何地方抛出异常 .

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

    但是,最好是使用其他库或实现自己的函数,在这种情况下使用 find 函数,因此您的代码是最高级的 .

  • 0

    如果将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
        }
    });
    

    Note:

    虽然使用jQuery也不错,但MDN推荐使用本机Array.someArray.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
    
  • 0

    通常没有办法打破javascript中的“each”循环 . 通常可以做的是使用“短路”方法 .

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

    正如其他答案所述,Angular不提供此功能 . 但是jQuery会这样做,如果你加载了jQuery和Angular,你可以使用

    jQuery.each ( array, function ( index, value) {
        if(condition) return false; // this will cause a break in the iteration
    })
    

    http://api.jquery.com/jquery.each/

  • 17

    break 无法在angular 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
                      }
                    });
    
  • 2

    你可以用这个:

    var count = 0;
    var arr = [0,1,2];
    for(var i in arr){
       if(count == 1) break;
       //console.log(arr[i]);
    }
    
  • 22
    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)
                }
    
            }      
        });
    });
    
  • -2

    试试这个休息;

    angular.forEach([0,1,2], function(count){
      if(count == 1){
        return true;
      }
    });
    
  • 2
    $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;
         });
     }
    
  • 0

    我希望通过返回来做到这一点 . 将循环部分放在私有函数中,并在想要中断循环时返回 .

  • 1

    我意识到这是旧的,但阵列过滤器可能会做你需要的:

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

    然后,您可以运行 arr.forEach 和其他数组函数 .

    我意识到,如果你打算完全减少循环操作,这可能不会做你想要的 . 为此你最好使用 while .

  • 0

    这个例子有效 . 试试吧 .

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

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

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

相关问题