下面是一些示例代码行。
if(loc > 0 || cat > 0 || price > 0 || jsBed <= bedroom || jsBuilt >= built) {
/// Condition to checn all true
return true;
} else if(loc < 0 || cat > 0 || price > 0 || jsBed <= bedroom || jsBuilt >= built) {
/////// 1 false other are true
} else if(loc > 0 || cat < 0 || price > 0 || jsBed <= bedroom || jsBuilt >= built) {
}
如何处理这些条件。如果我有5个语句。那么它必须是几乎12+条件一个接一个。。如果我检查所有的5个组合它去更多的代码行我们有没有更好的选择来检查所有的条件。
5条答案
按热度按时间bejyjqdl1#
如果你在javascript中把一个布尔表达式当作一个整数来处理,那么它的值会是
0
(对于false
)或者1
(对于true
),所以你可以把这些条件加起来,然后用一个大小写转换结构来检查有多少个条件是真的:k75qkfdt2#
你有一个永远不会满足的条件:
基本上:
cat > 0 || price > 0 || jsBed <= bedroom || jsBuilt >= built
是无用的,因为在第一个条件中已经满足了,因为你使用了else if
,他们已经输入了第一个if,所以唯一重要的是loc < 0
。elseif
相同,仅cat < 0
相关。所以它可以重写为
这个答案假设所提供的代码是您试图简化的代码,而不是一般的示例。
注意:我想你可能没有写你想做的,忘记了一些AND而不是OR。
a2mppw5e3#
5个条件为2**5,即32个组合。
如果您想检查各种组合,而不重复测试,您可以对单个结果进行位移位,然后将它们组合成一个switch语句。直接使用数字是简洁的,但可读性不是很强
将此语句修改为使用常量将使switch语句更具可读性
你可以用常量来帮助
vlju58qv4#
我不确定您是否希望看到所有的组合,但是您可以通过为每个可能的输出引入一个数值来对它们进行分组。
具体来说,有5个变量,每个变量有2个选项?我已经建立了一个用二进制表示的数字表。如果每个(或某些)变量有〉2个选项,你必须使用数字(基数为10)。你可以使用二进制值,如
因此,您可以将它们分组到一个方法中:
这使得
(我省略了其他变量...)然后将二进制值相加
然后,您现在必须使用switch case语句,如
case
中的值表示total
中存在的二进制序列的整数值,必须注意的是,非常好地记录代码是极其重要的,特别是case块,以便其他读者可以直接找出哪个值代表什么(就像我所做的那样)。如果每个变量有两个以上的选项,则可以使用因子10(如在方法foo中,使用
(trueCond ? 1 : 0) * Math.pow(10, level)
)e0uiprwp5#
由于你的3个条件是固定的,你可以先有他们,然后是其他人,这可以转换为开关的情况。