2016-01-21 105 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; 
    } 
}