【问题标题】:Simplifying not equal && condition [duplicate]简化不等于 && 条件
【发布时间】:2021-07-17 09:44:20
【问题描述】:

有没有办法简化下面的条件?

var test = "";
var a = "NA";
var b = "valid";

answer = (v:string)=> {
     test = v!==a && v!==b; //this condition here
}

v 不等于 ab

我试过v!==(a&&b),但似乎不是这样。

如果以上已经是条件的最简单版本,请告诉我, 谢谢!

【问题讨论】:

  • 您将结果分配给test,但不从函数返回任何内容,因此answer 也不会被分配
  • 抱歉,假设测试是一个“this.test”变量
  • test = ![a,b].includes(v)

标签: javascript angular


【解决方案1】:
(v: string) => { 
  test = [a,b].every(x => x !== v); 
}

(v: string) => { 
  test = ![a,b].includes(v); 
}

【讨论】:

    【解决方案2】:

    从数学上来说

    根据De Morgan's Law,您可以随时反转您的表达式,如下所示:

    1. (not x) and (not y)not (x or y) 相同
    2. (not x) or (not y)not (x and y) 相同

    您有第一种情况,其中not x = v!==anot y = v!==b,即x = v === ay = v === b。在您的情况下,最终反转将如下所示:

    answer = (v:string)=> {
         test = !(v === a || v === b); //this condition here
    }
    

    关于 Intellij IDEA 产品(WebStorm、Intellij、PyCharm 等)的注意事项

    如果您将光标放在if 语句中的condition 上,然后按Alt+Enter,您可以选择“反转'if' 条件”选项,该选项将自动应用德摩根定律。

    【讨论】:

      【解决方案3】:

      作为替代方案,您可以创建一个带有状态的对象:

      let test = "";
      let states = {
          NA: 1,
          valid: 1,
          'Not Valid': 1
      }
      
      const answer = (v) => states[v];
      

      一个例子:

      let test = "";
      let states = {
          NA: 1,
          valid: 1,
          'Not Valid': 1
      }
      
      const answer = (v) => states[v];
      
      
      const na = 'NA';
      const valid = 'valid';
      const notValid = 'Not Valid';
      console.log(na, answer(na))
      console.log(valid, answer(valid))
      console.log(notValid, answer(notValid))

      这种方法的优点之一是无需编辑answer() 方法,只需将状态添加到states 对象即可。

      【讨论】:

        猜你喜欢
        • 2011-08-25
        • 2011-09-03
        • 2020-08-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-11
        • 2020-02-12
        • 2020-02-20
        相关资源
        最近更新 更多