2016-08-24 2 views
-2

if 문에서 잘못된 결과를 얻을 때 루프를 멈추려 고하지만 작동하지 않고 누락 된 부분을 볼 수 없습니다. 나는 해결책이 될 것이지만 여전히 아무것도 원하지 않는 라벨을 추가했다.for-loop break 문을 무시합니까?

let a1 = [1321, 144, 19, 161, 19, 144, 19, 11]; 
let a2 = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]; 

function comp(a,b){ 
    a.sort() 
    b.sort() 

    var result = true; 

    if (a === null || b === null) { return !result } 
    if(a.length < 1 || b.length < 1) { return !result } 

loop_label: for (var i =0; i < a.length; i++) { 
    console.log(a[i]*a[i], b[1],(a[i]*a[i]) == b[i]) 
    if(!(a[i]*a[i]) == b[i]) { 
     return !result; 
     break loop_label; 
    } 
    } 
    return result; 
}; 

대신 무슨 일이 통해 반복 계속 것입니다 그리고 마지막에 true를 돌려 그러나 나는 평가 중 하나가 거짓 인 경우 false를 반환합니다. 이처럼해야하는 경우

+9

은'return' 문을 원하는 것을 할 곳에 즉시 기능을 종료합니다. – Pointy

+2

정확하게 "작동하지 않는"방법은 무엇입니까? 'break' 문은'return' 후에 결코 도달하지 않을 것이기 때문에 불필요한 반면, loop *는'return' 후에 "stop"을합니다. – David

+0

아마도 console.log 문은 코드를 종료하지 않는다는 잘못된 가정을하기 때문에 console.log 문은 항상'b [1]'을 출력하고'b [i]'를 출력하지 않기 때문일 수 있습니까? – Icepickle

답변

1

당신 : 당신도 이미 따라서, 당신을위한 기능 나갈 것 반환 이후 labelbreak 필요하지 않습니다

if(a[i]*a[i] != b[i]) { 
    return !result; 
} 

, 루프는 분명히 중지됩니다.

+0

맞습니다. 필자는 필자가 필요했던 것보다 훨씬 더 복잡하게 만들었습니다. – Batman

1

위의 줄이 return !result이므로 break loop_label;에 도달하지 않았습니다. 반환 값이 !resultcomp에 대한 호출이 종료됩니다.

실제로 중단이 적용될 경우에 반품되며 반대 result이 반환됩니다 (반대로, 메서드의 마지막 줄).

루프에서 return !result; 줄을 제거하거나 최종 반환과 동일하게 변경하려면 return result;으로 변경하십시오. 둘 중 원하는 동작을 선택하십시오.

0

왜이 같은 구조 해달라고, if가 건너하고 else 당신이

if(!(a[i]*a[i]) == b[i]) {} else{ // do something here }