2016-01-21 3 views
-2

Есть ли способ сжатия этого if заявления?Javascript оптимизирует, если оператор

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

В любом случае вы можете использовать [компилятор закрытия] (http://closure-compiler.appspot.com/home). – Filipe

+0

Просто наблюдение, я знаю, что вы подразумеваете под «сжатием», но в этом контексте это будет путать с другими. Я думаю, вы хотите сказать «очистить» или «оптимизировать». – patricksweeney

ответ

1

Поскольку вы просто проверить, если x2 находится в пределах 10 x10 и y2 находится в пределах 10 y10, и так далее, вы можете изменить его на:

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

Вы не можете «сжать» код, но вы можете сделать его более читаемым.

Вы проверяете пары чисел в одном и том же состоянии, поэтому массив пар, вероятно, лучший путь вперед.

Вы также можете ускорить работу и удобочитаемость еще немного, вычислив x10 - 10 и т. Д. Вне цикла for.

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; 
    } 
} 
Смежные вопросы