JavaScript에서 중첩된 루프를 해제하는 방법
이거 해봤어요.
for(i = 0; i < 5; i++){
for(j = i + 1; j < 5; j++){
break(2);
}
alert(1);
}
입수처:
SyntaxError
: 없음;
진술 전
그러면 자바스크립트에서 네스트된 루프를 어떻게 끊을 수 있을까요?
다음과 같이 라벨을 분할할 수 있습니다.
function foo () {
dance:
for (var k = 0; k < 4; k++) {
for (var m = 0; m < 4; m++) {
if (m == 2) {
break dance;
}
}
}
}
이렇게 내부 루프가 아니라 외부 루프의 이름을 붙이고 루프를 끊어야 합니다.
outer_loop:
for(i=0;i<5;i++) {
for(j=i+1;j<5;j++) {
break outer_loop;
}
alert(1);
}
2개 이상의 루프를 분리하는 방법에는 적어도5가지가 있습니다.
1) 부모 루프를 끝까지 설정한다.
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
{
i = 5;
break;
}
}
}
2) 라벨 사용
fast:
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
break fast;
}
}
3) 변수 사용
var exit_loops = false;
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
{
exit_loops = true;
break;
}
}
if (exit_loops)
break;
}
4) 자기실행기능을 사용한다.
(function()
{
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
return;
}
}
})();
5) 일반 기능을 사용한다.
function nested_loops()
{
for (i = 0; i < 5; i++)
{
for (j = 0; j < 5; j++)
{
if (j === 2)
return;
}
}
}
nested_loops();
애런 거 봐그렇지 않은 경우: j=5;i=5
대신break
.
loop1:
for (var i in set1) {
loop2:
for (var j in set2) {
loop3:
for (var k in set3) {
break loop2; // breaks out of loop3 and loop2
}
}
}
Javascript의 중첩된 루프에서 벗어나는 최선의 방법에서 복사한 코드?
질문을 올리기 전에 검색해 주세요.이 페이지 왼쪽에서 처음 본 관련 질문입니다!
유감스럽게도 플래그를 세팅하거나 라벨을 사용해야 합니다(구식 goto 스테이트먼트라고 생각됩니다).
var breakout = false;
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
breakout = true;
break;
}
if (breakout) break;
alert(1)
};
라벨 접근법은 다음과 같습니다.
end_loops:
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
break end_loops;
}
alert(1)
};
edit: 라벨이 잘못 배치되었습니다.
다음 항목도 참조해 주세요.
- http://www.devguru.com/Technologies/ecmascript/quickref/break.html
- http://www.daaq.net/old/javascript/index.php?page=js+exiting+loops&parent=js+statements
내 생각에는 구성 어휘를 최소한으로 유지하는 것이 중요하다.만약 내가 휴식을 없애고 쉽게 계속할 수 있다면, 나는 그렇게 할 것이다.
function foo ()
{
var found = false;
for(var k = 0; (k < 4 && !found); k++){
for(var m = 0; (m < 4 && !found); m++){
if( m === 2){
found = true;
}
}
}
return found;
}
루프 후에는 m과 k가 생각 이상으로 커집니다.이는 m++ 및 k++가 루프 조건 전에 실행되기 때문입니다.하지만 '더러운' 휴식보다는 낫다.
편집: 긴 댓글 @Dennis...
저는 '더러운' 것에 대해 100% 진지하게 말한 것은 아니지만, 여전히 '깨짐'은 깨끗한 코드에 대한 제 자신의 개념에 위배된다고 생각합니다.다단계 휴식 시간을 갖는다는 생각을 하면 실제로 샤워를 하고 싶은 기분이 든다.
나는 평생 코드화를 해왔기 때문에 코드에 대한 감정에 대한 내 말의 의미를 정당화한다.내가 생각할 수 있는 가장 좋은 것은 매너와 문법의 조합이다.쉬는 건 예의가 아니야다단계 휴식 시간은 정말 무례합니다.
for 스테이트먼트를 참조할 때, 독자는 정확히 어디를 참조해야 하는지 알 수 있습니다.계약 수칙에 대해 알아야 할 모든 것은 계약서 안에 괄호 안에 있습니다.독자로서 쉬는 시간은 나를 모욕한다. 내가 사기를 당한 것 같다.
부정행위보다 명료함이 훨씬 더 존경스럽다.
다단계 루프에 함수를 사용합니다. 이는 좋은 방법입니다.
function find_dup () {
for (;;) {
for(;;) {
if (done) return;
}
}
}
자체 실행 함수로 포장하여 반환
(function(){
for(i=0;i<5;i++){
for (j=0;j<3;j++){
//console.log(i+' '+j);
if (j == 2) return;
}
}
})()
»return
for
loopsyslog.syslog..syslog.
function foo ()
{
//dance:
for(var k = 0; k < 4; k++){
for(var m = 0; m < 4; m++){
if(m == 2){
//break dance;
return;
}
}
}
}
foo();
break
매개 변수를 사용하지 않습니다.회피책은 두 가지가 있습니다.
.
return
내부 루프에 플래그를 설정하고 플래그가 설정되어 있으면 루프 직후에 다시 차단합니다.
첫 번째 루프 차단:
for(i=0;i<5;i++)
{
for(j=i+1;j<5;j++)
{
//do something
break;
}
alert(1);
};
양쪽 루프를 절단합니다.
for(i=0;i<5;i++)
{
var breakagain = false;
for(j=i+1;j<5;j++)
{
//do something
breakagain = true;
break;
}
alert(1);
if(breakagain)
break;
};
"break"라는 단어를 사용하여 루프의 중첩을 해제할 수 있습니다. 레이블 없이 작동합니다.
이 경우 루프를 끊기에 충분한 조건이 필요합니다.
다음은 예를 제시하겠습니다.
var arr = [[1,3], [5,6], [9,10]];
for (var a = 0; a<arr.length; a++ ){
for (var i=0; i<arr[a].length; i++) {
console.log('I am a nested loop and i = ' + i);
if (i==0) { break; }
}
console.log('first loop continues');
}
다음의 로그가 기록됩니다.
> I am a nested loop and i = 0
> first loop continues
> I am a nested loop and i = 0
> first loop continues
> I am a nested loop and i = 0
> first loop continues
이 경우 return; 스테이트먼트는 기능하지 않습니다.작업용 펜
function myFunction(){
for(var i = 0;i < n;i++){
for(var m = 0;m < n;m++){
if(/*break condition*/){
goto out;
}
}
}
out:
//your out of the loop;
}
언급URL : https://stackoverflow.com/questions/1564818/how-to-break-nested-loops-in-javascript
'programing' 카테고리의 다른 글
RESTful API 구축 방법 (0) | 2022.11.07 |
---|---|
PHP 및 MySQL - 소스 코드에서 암호를 피하는 방법 (0) | 2022.11.07 |
Python으로 HTML 이메일 보내기 (0) | 2022.11.07 |
정수에서 자릿수 길이를 찾으려면 어떻게 해야 합니까? (0) | 2022.11.07 |
Java의 패턴과 일치하는 디렉토리에 파일 나열 (0) | 2022.11.07 |