【问题标题】:Logical reduction of code to a one-line expression将代码逻辑简化为单行表达式
【发布时间】:2017-09-26 06:52:00
【问题描述】:

这个好像是真的。如何将其减少为一个 if 语句?

    let combined = true;

    if(earlyCallback){
      combined = self.allChildBlocksCompleted;
    }

    if (self.parent && combined) {  // I want to put everything here

    }

这对吗?

 if(self.parent || (earlyCallback && self.allChildBlocksCompleted)){

  }

我认为这是对的,但我现在不能说。

【问题讨论】:

  • 是的,我的解决方案是错误的,因为 self.parent 总是要求为真,所以 logical or 不起作用。
  • 不就是self.parent && (earlyCallback && combined)吗?
  • @Andy 我也是这么想的,但是您的解决方案的问题是,如果 earlyCallback 为假,那么 if 语句的计算结果为假。但我希望如果 earlyCallback 为假,那么 if 语句仍有机会评估为真。
  • 大声笑为什么这么难哈哈
  • 我的原始代码(在 OP 的顶部)是正确的。我只是对如何减少它感到好奇,因为我知道它可以减少至少一个变量。

标签: javascript logic


【解决方案1】:

我更喜欢这样做:

if (self.parent && (earlyCallback ? self.allChildBlocksCompleted : true )) { }

【讨论】:

  • 我认为这是正确的,但我希望它可以进一步简化
  • 但是earlyCallback 不会总是以真的结束吗?
  • earlyCallback 是这个答案中的自变量
  • 我发誓有办法进一步简化这一点
【解决方案2】:

这相当于接受的答案:

if (self.parent && (!earlyCallback || self.allChildBlocksCompleted)) {

您可能认为这比其他需要硬编码文字 true 和三元运算符的答案更简单。它也缩短了几个字符:

if (self.parent && (earlyCallback ? self.allChildBlocksCompleted : true)) {

您可以通过使用 De Morgan 将一个“或”替换为一个额外的非和一个“与”来进一步“简化”它:

if (self.parent && !(earlyCallback && !self.allChildBlocksCompleted)) {

【讨论】:

  • 啊是的,看起来像
猜你喜欢
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-31
相关资源
最近更新 更多