2016-01-21 101 views
-2

有没有一种方法来压缩这if陈述?Javascript优化if语句

var alive1 = true 
if (x2 >= (x10 - 10) && x2 <= (x10 + 10) && y2 >= (y10 - 10) && y2 <= (y10 + 10) || x3 >= (x10 - 10) && x3 <= (x10 + 10) && y3 >= (y10 - 10) && y3 <= (y10 + 10) || x4 >= (x10 - 10) && x4 <= (x10 + 10) && y4 >= (y10 - 10) && y4 <= (y10 + 10) || x5 >= (x10 - 10) && x5 <= (x10 + 10) && y5 >= (y10 - 10) && y5 <= (y10 + 10)|| x6 >= (x10 - 10) && x6 <= (x10 + 10) && y6 >= (y10 - 10) && y6 <= (y10 + 10)) { 
    alive1 = false; 
} 
+1

这么多的条件,那么你正在做财产以后出错,否则去阵列。 –

+0

无论如何,你可以使用[closure compiler](http://closure-compiler.appspot.com/home)。 – Filipe

+0

只是一个观察,我知道你的意思是“压缩”,但在这种情况下,这会让其他人感到困惑。我想你想说的是“清理”或“优化”。 – patricksweeney

回答

1

既然你只是检查是否x2是内是内y10 10,等等,你可以把它改成:

if (Math.abs(x2 - x10) <= 10 && Math.abs(y2 - y10) <= 10 && ...) { 
    alive1 = false; 
} 
2

你不能真正“压缩”代码,但可以使其更具可读性。

您正在检查对相同条件的数字对,因此一组数组可能是最好的方法。

您还可以通过在for循环之外计算x10 - 10等来加快性能和可读性。

var alive1 = true; 

var minX = x10 - 10; 
var maxX = x10 + 10; 
var minY = y10 - 10; 
var maxY = y10 - 10; 

var coords = [[x2,y2], [x3,y3], [x4,y4], [x5,y5], [x6,y6]]; 

// loop each [x,y] pair 
for(var i = 0; i < coords.length; i++) { 
    var x = coords[i][0]; 
    var y = coords[i][1]; 
    if(x >= minX && x <= maxX && y >= minY && y <= maxY) { 
     alive1 = false; 
     // found a false condition, no need to continue the loop 
     break; 
    } 
}