如何减少"if statement"条件? [减少 if 语句中的条件]

How to reduce "if statement" conditions? [reduce the conditions inside the if statement]

经过几天的苦思冥想,我选择问这个问题。我有多个条件的 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 之外做我的事情,在另一个 [=12] =] - 但我认为这并不总是有效,因为对于每个循环,标志都会不同。

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!
}

我想我明白你在问什么,但如果还有什么我可以做的,请告诉我。

JavaScript 有一个三元(条件运算符)https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Conditional_Operator

此运算符允许您根据内部 if/else 条件分配 true/false 值。

这里有一些代码供您解释...

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

您还可以使用 Switch 语句,您可以在此处阅读 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;
  }
};

让我知道我是否可以改进它。