-1

после нескольких дней напряженного мышления я выбираю, чтобы задать этот вопрос. У меня есть if заявление с несколькими условиями:Как уменьшить условия «если заявление»? [уменьшите условия внутри оператора if]

//var current is array of arrays of integers 
if((current[rot][0] + x)<blocks.length 
    && (current[rot][1] + x)<blocks.length 
    && (current[rot][2] + x)<blocks.length 
    && (current[rot][3] + x)<blocks.length 
    && !$(blocks[current[rot][0]+x]).hasClass("blockLand") 
    && !$(blocks[current[rot][1]+x]).hasClass("blockLand") 
    && !$(blocks[current[rot][2]+x]).hasClass("blockLand") 
    && !$(blocks[current[rot][3]+x]).hasClass("blockLand")) 
    { 
    //something to happen here ONCE! 
    } 

Потому что я хочу что-то внутри, чтобы случиться только один раз я думаю, что я не могу использовать for loop. Итак, мой вопрос: есть ли способ уменьшить количество условий? и как?

P.S .: Да я понял, что я могу использовать flag (true/false) внутри и делать свои вещи вне этой if, в другом if - но я думаю, что не всегда будет работать, потому что для каждого цикла флаг будет отличаться.

+3

Добавить полный код, также добавить HTML, может быть полезно оптимизировать код – Tushar

+1

Все дело в логике, другой код не имеет ничего общего с этим! –

+1

Если ваша цель - сделать ее более читаемой, вы можете извлечь атомные условия для логических функций или переменных и проверить их –

ответ

4
var b = true; 

for (var i = 0; i <= 3; i++) { 

    // In two lines for being clear, but it's possible just in one 
    b = b && (current[rot][i] + x)<blocks.length 
    b = b && !$(blocks[current[rot][i]+x]).hasClass("blockLand"); 

    // You could speed it up this way. 
    if(!b) break; 
} 

if (b) { 
    //something to happen here ONCE! 
} 
+2

'Boolean b = true' ??? Вы пытались запустить код – Tushar

+1

Я работаю над этим, это своего рода работа. когда я закончу с ним, я отвечу вам и подтвержу ваш ответ (через 24 часа). –

+0

Его работа так, как я хочу :) 10x много. –

1

Я думаю, что понимаю, что вы просите, но дайте мне знать, если есть что-то еще, что я могу сделать.

JavaScript имеет трехкомпонентной (условный оператор) https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

Этот оператор позволяет назначить истинные/ложные ценности основаны на внутренней, если/другое условие.

Вот код для вас, чтобы объяснить это ...

window.onload = function() { 
 
    var one = 1; 
 
    var two = 2; 
 
    console.log(one > two ? "greater" : "not greater"); 
 
};

Вы можете также использовать переключатель заявление, в котором вы можете прочитать о здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/switch.

Ниже приведен пример оператора switch.

window.onload = function() { 
 
    var string = "testing this out"; 
 
    switch (string) { 
 
    case "testing this out": 
 
     console.log('testing this out found in condition one'); 
 
     break; 
 
    case "testing": 
 
     console.log('found testing'); 
 
     break; 
 
    default: 
 
     console.log('not found'); 
 
     break; 
 
    } 
 
};

Позвольте мне знать, если я могу улучшить это.

Смежные вопросы