JavaScript条件逻辑运算符

时间:2018-06-21 15:41:25

标签: javascript

我有以下内容:

var cond1 = (a>b) ? true: false;
var cond2 = (d<c) ? true: false;
var cond3 = (e==f) ? true: false;

var found = cond1 && cond2 && cond3;

我希望能够以一种优雅的方式将&&逻辑运算符替换为另一个||。并以编程方式执行此操作,就像使用“变量”运算符一样。因为我不想做类似的事情:

var found1 = cond1 && cond2 && cond3;
var found2 = cond1 || cond2 || cond3;
var found3 = (cond1 && cond2) || cond3;

,然后切换/如果根据用户从界面中选择的选项,这并不美观。

我该怎么做? (如果可能)

提前谢谢

3 个答案:

答案 0 :(得分:2)

我将从一种类似方法开始,该方法可以接受字符串(AND / OR)和bool代表数组并执行操作

function operator(which, ...args)
{
    switch(which.toUpperCase())
    {
        case "AND": return args.every(a => a());
        case "OR": return args.some(a => a());
        default: throw "Invalid operator " + which;
    }
}

var a = 1;
var b = 2;
var c = 3;
var d = 4;
var e = 5;
var f = 5;

var cond1 = () => (a>b) ;
var cond2 = () => (d<c) ;
var cond3 = () => (e==f);

var found1 = operator("and",cond1,cond2,cond3);
var found2 = operator("or",cond1,cond2,cond3);
var found3 = operator("or", () => operator("and",cond1,cond2), cond3);
console.log(found1,found2,found3)

从那里可以轻松地进行动态构建。

参考

答案 1 :(得分:1)

我认为编写这种代码的优雅方式应该是可读且易于理解的代码。在我看来,使逻辑变得复杂以实现简单的事情是没有意义的。保持简单和干净的事物比复杂的逻辑更不易出错,它使我们对代码充满信心。

在这里您可以将&&||存储在变量中,并可以传递给函数。

var cond1 = (2>3);
var cond2 = (5<9);
var cond3 = (5==7);

const compareConditions = (operator, operand1, operand2) => {
  switch(operator){
    case "&&": {
      return operand1 && operand2;
    }
    case "||":{
       return operand1 || operand2;
    }
    default:{
      return false;
    }
  }
}

console.log(compareConditions("||", compareConditions("&&" , cond1, cond2), cond3));

答案 2 :(得分:0)

根据复杂性,我要么选择与您已经拥有的东西相似的东西,要么如果有很多选择,我可能会选择某种标志/位掩码解决方案。

这里有一些很好的JavaScript示例:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators