2016-08-24 131 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時返回false。

+9

的'return'聲明什麼,立刻退出功能。 – Pointy

+2

這究竟是以什麼方式「不工作」?雖然'break'語句是多餘的,因爲它在'return'之後永遠不會到達,循環*會在return之後停止。 – David

+0

也許是因爲你的console.log語句總是拋出'b [1]'而不是'b [i]'你得到錯誤的假設,它不會退出代碼? – Icepickle

回答

1

你如果一定是這樣的:

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

你甚至都不需要labelbreak因爲回報將已經走出你的函數,因此,該循環將明顯停止。

+0

你是對的,我做得比它需要的複雜得多。 – Batman

1

未達到break loop_label;,因爲上面的行是:return !result。結束呼叫comp,返回值爲!result

如果實際應用中斷並且result將被返回(不是否定的,該方法的最後一行),則返回相反的結果。

因此,考慮在循環中刪除return !result;行,或者將其更改爲return result;,使其與最終回報相同 - 以期望的行爲爲準。

0

你爲什麼不構建這樣的,在那裏if將跳過和else會做你想要

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