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

时间:2015-11-25 15:22:25

标签: javascript jquery if-statement for-loop multiple-conditions

经过几天的艰苦思考,我选择提出这个问题。我有多个条件的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。 所以我的问题是:是否有可能减少条件数量的方法?怎么样?

PS:是的,我发现我可以在flag内使用true/falseif)并在if之外的另一个xmlDoc.PreserveWhitespace = false; 中执行我的工作 - 但我认为并不总是能够奏效,因为对于每一个循环,旗帜都会不同。

2 个答案:

答案 0 :(得分: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!
}

答案 1 :(得分:1)

我想我明白你在问什么但请告诉我是否还有其他事情可以做。

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

如果我可以改进,请告诉我。