각도 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!')
}
답변
내가 아는 한 Angular는 그러한 기능을 제공하지 않습니다. 이를 위해 밑줄 find()
함수 를 사용할 수 있습니다 (기본적으로 함수가 true를 반환하면 루프에서 벗어나는 forEach입니다).
답변
AngularJS와 함께 jQuery (따라서 jqLite가 아님)를 사용하면 $ .each를 반복하여 부울 리턴 값 표현식을 기반으로 중단하고 계속할 수 있습니다.
JSFiddle :
자바 스크립트 :
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
. 따라서 코드의 수준이 가장 높습니다.