2016-08-24 132 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 }