【问题标题】:Are ternary operators in ternary operatory possible三元运算符中的三元运算符是否可能
【发布时间】:2021-10-06 18:55:32
【问题描述】:

为什么这条线不起作用

        x > highNum ? highNum = x : y > highNum ? highNum = y : highNum = highNum

在这种情况下,这条线处于循环中,并且 x 和 y 每次都不同。我试图在最后找到最高的数字,并认为这会奏效。 在我看来,这读作: 如果 x 高于高数 highnum 应该被分配 x 的值 如果不。 你更大吗? 如果是,y 应该是新的 highnum。 如果不。 不要改变高数

【问题讨论】:

  • 如果您不坚持使用三元运算符,highnum = Math.max(x, y, highNum) 是最好的方法。
  • "doesn't work" 并不是一个清晰的问题描述。描述出了什么问题。更好的是,在可运行的 sn-p 中包含一个具体示例,突出问题。

标签: javascript node.js conditional-operator


【解决方案1】:

是的,但您需要括号,主要是为了便于阅读:

(x > highNum) ? (highNum = x) : ((y > highNum) ? (highNum = y) : (highNum = highNum));

在您的情况下,您最好将其拆分为多个语句以防止混淆:

if (x > highNum) {
    highNum = x;
} else if (y > highNum) {
    highNum = y;
}

虽然这不适合单个表达式,但也许这表明您的代码有点过于复杂/不可读。

如果您只是在寻找最大的数字,也许Math.max 就是您所需要的,即Math.max(x, y, highNum)

【讨论】:

  • 是的,你可能是对的。只是好奇这是否可能。可以用于一些有趣的 oneliner
  • 技术上你可以。您可以使用x > highNum ? x : (y > highNum ? y : highNum) 来获得最高值,如果您还想设置变量,则在它周围拍打highNum = (...)。有趣的oneliners可能很有趣,但通常在适当的项目中不受欢迎。 难以理解、测试和维护等等。
【解决方案2】:

简短回答:

是的,他们是。

长答案:

是的,但您也应该关注可读性。您的代码完全符合您的预期,但是其他开发人员(也许将来的您)可能无法理解这一点,因此我强烈建议您不要使用嵌套三元运算符,并且仅在以下情况下使用它们它比一个简单的 if else 语句更有意义。 如果即使在这一切之后你仍然想使用它,至少添加一条评论来解释它的作用。例如:

  let highNum
  for(let line of lines){
     const {x, y} = line; 
     // use bubble sort to find the highest number
     x > highNum ? highNum = x : y > highNum ? highNum = y : highNum = highNum
  }
  

编辑:此外,正如“trincot”所说,这也没有正确找到最高数字

【讨论】:

    【解决方案3】:

    如果 x 高于 high num,highnum 应该被分配 x 的值,否则。你更大吗?如果是,y 应该是新的 highnum。如果不。不要改变高数

    那就是:

    highNum = (x > highNum) ? x : ((y > highNum) ? y : highNum)
               [condition] ?[true]:         [false]
                                  ([condition] ? [true] : [false]) // Evaluated if the first condition was false
    

    结构是variable = [condition] ? [value for true] : [value for false]

    您可以使用额外的括号来使用嵌套的三元组而不是 [value]

    这与:

    if(x > highNum) {
      highNum = x
    } else if(y > highNum) {
      highNum = y
    } else {
      highNum = highNum // Quite useless... That is for explanation purpose ;)
    }
    

    【讨论】:

      【解决方案4】:

      您可能会错过一个潜在的高值:当x > highNumy > x 时,您不会看到y 确实是最高的,因为表达式已经决定highNum 应该获取x的值。

      你可以用Math.max很简单地做到这一点:

      highNum = Math.max(x, y, highNum);
      

      【讨论】:

        【解决方案5】:

        您还必须考虑y>x 实例。

        highNum = (x > y) ? (x > highNum ? x : highNum) :(y > highNum ? y : highNum);

        上面等于下面:

        if (x>y) {
            if (x>highNum) {
                highNum = x;
            } else {
                highNum = highNum;
            }
        } else { //covers both instances of y>x and x=y
            if (y>highNum) {
                highNum = y;
            } else {
                highNum = highNum;
            }
        }
        

        【讨论】:

          猜你喜欢
          • 2019-10-08
          • 1970-01-01
          • 2018-09-10
          • 1970-01-01
          • 2012-08-08
          相关资源
          最近更新 更多