【问题标题】:How do two ternary operators work together in JS?JS中两个三元运算符如何协同工作?
【发布时间】:2020-05-13 05:10:57
【问题描述】:

所以我在网上做一个代码问题,其中一个解决方案显示如下

function electionsWinners(votes, k) {
  var max=Math.max(...votes)
  var r=votes.filter(x=>x+k>max||x===max).length
  return k?r:r==1?1:0
}

我认为问题的具体细节无关紧要,我对 return 语句的工作原理更感兴趣。我完全不明白返回了什么,似乎使用了 2 个三元运算符,但我不确定,谁能帮我理解这个返回语句的功能?

【问题讨论】:

  • k ? (r) : (r==1 ? (1) : (0))afaic.
  • 一般来说,尽量避免嵌套三元组。它们本质上令人困惑。它们唯一有用的时候是在代码高尔夫中,你的评判标准是简洁。
  • @Wendelin 真的没有别的选择了……
  • @Bergi,那么问题是什么?
  • 问题是为什么人们总是在一行中使用多个。

标签: javascript conditional-operator


【解决方案1】:

是的 2 三元运算符 返回 k?r:r==1?1:0

我会放完整的 IF 代码

if(k) //not is null
  return r;
else
{
  if(r==1)
    return 1;
  else
    return 0;
}

【讨论】:

    【解决方案2】:

    如果你把它转换成 if else 语句,那么你会更好地理解发生了什么:

    if (k) {
      return r;
    } else if (r === 1) {
      return 1;
    } else {
      return 0;
    }
    

    或者

    if (k) {
      return r;
    }
    if (r === 1) {
      return 1;
    }
    return 0;
    

    【讨论】:

      【解决方案3】:

      你可以看看

      k?r:r==1?1:0
      

      作为单个表达式。每个? 都连接到其紧随其后的:,因此相当于:

      k ? r : (r==1 ? 1 : 0)
      

      只有当k 为假时,第二个条件运算符才会生效。在第二个条件中,如果r1,则返回1,否则返回0

      缩进可能更清楚:

      return (k
        ? r
        : (r == 1
          ? 1
          : 0
        )
      );
      

      【讨论】:

        【解决方案4】:

        第一个测试是k ?是k不是0/undefined/null吗?如果是,则返回 r (r) else : 如果 r 为 1 (r==1 ?) 返回 1 (1) 否则返回 0 (0))

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-08-31
          • 2010-10-02
          • 2013-07-12
          • 2012-11-11
          • 2018-09-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多