如何减少"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;
}
};
让我知道我是否可以改进它。
经过几天的苦思冥想,我选择问这个问题。我有多个条件的 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;
}
};
让我知道我是否可以改进它。