[angularjs] 각도 JS 휴식 ForEach

각도 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루프는 조건 일치에 분리 할 수 없습니다.

내 개인적인 조언은 대신 NATIVE FOR 루프 를 사용하는 것입니다 angular.forEach.

NATIVE FOR 루프는 다른 for 루프보다 약 90 % 빠릅니다.

루프 브레이크, 루프 테스트 결과

ANGULAR에서 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 Some 메서드 사용

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

존재하면 true를 반환하고 함수에서 변수로 사용할 수 있습니다.

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

일부 메소드 배열-Javascript


답변

내가 아는 한 Angular는 그러한 기능을 제공하지 않습니다. 이를 위해 밑줄 find()함수 를 사용할 수 있습니다 (기본적으로 함수가 true를 반환하면 루프에서 벗어나는 forEach입니다).

http://underscorejs.org/#find


답변

AngularJS와 함께 jQuery (따라서 jqLite가 아님)를 사용하면 $ .each를 반복하여 부울 리턴 값 표현식을 기반으로 중단하고 계속할 수 있습니다.

JSFiddle :

http://jsfiddle.net/JEcD2/1/

자바 스크립트 :

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은 기본 forEach 문서를 읽을 수 있으므로 기본 Array.some 또는 Array.every 함수를 모두 권장 합니다.

“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. 따라서 코드의 수준이 가장 높습니다.