三元运算符中的三元运算符是否可能
Are ternary operators in ternary operatory possible
为什么这条线不起作用
x > highNum ? highNum = x : y > highNum ? highNum = y : highNum = highNum
在这种情况下,这条线是一个循环,x 和 y 每次都不一样。我试图在最后找到最高的数字,并认为这会奏效。
在我看来,这是这样写的:
如果 x 高于 high num
应为 highnum 分配 x 的值
如果不。
你更大吗?
如果是,y 应该是新的 highnum。
如果不。
不要改变 high num
是的,但您需要括号,主要是为了便于阅读:
(x > highNum) ? (highNum = x) : ((y > highNum) ? (highNum = y) : (highNum = highNum));
在您的情况下,您最好将其拆分为多个语句以防止混淆:
if (x > highNum) {
highNum = x;
} else if (y > highNum) {
highNum = y;
}
尽管这不适合单个表达式,但也许这表明您的代码有点过分了 complex/unreadable。
如果您只想寻找最大的数字,也许 Math.max 就是您所需要的,即 Math.max(x, y, highNum)
.
简答:
是的,他们是。
长答案:
是的,但您也应该关注可读性。您的代码完全按照您的期望执行,但其他开发人员(也许将来您)可能无法理解这一点,因此我强烈建议您永远不要使用嵌套的三元运算符,并且仅在以下情况下使用它们它比简单的 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”所说,这也没有正确找到最高数字
If x is higher than high num highnum should get assigned the value of x if not. is y bigger? if yes y should be the new highnum. if not. dont change high num
那就是:
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 ;)
}
您可能会错过一个潜在的高值:当 x > highNum
和 y > x
时,您不会看到 y
确实是最高的,因为表达式会已经决定 highNum
应该得到 x
.
的值
你可以用 Math.max
很简单地做到这一点:
highNum = Math.max(x, y, highNum);
您还必须考虑 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;
}
}
为什么这条线不起作用
x > highNum ? highNum = x : y > highNum ? highNum = y : highNum = highNum
在这种情况下,这条线是一个循环,x 和 y 每次都不一样。我试图在最后找到最高的数字,并认为这会奏效。 在我看来,这是这样写的: 如果 x 高于 high num 应为 highnum 分配 x 的值 如果不。 你更大吗? 如果是,y 应该是新的 highnum。 如果不。 不要改变 high num
是的,但您需要括号,主要是为了便于阅读:
(x > highNum) ? (highNum = x) : ((y > highNum) ? (highNum = y) : (highNum = highNum));
在您的情况下,您最好将其拆分为多个语句以防止混淆:
if (x > highNum) {
highNum = x;
} else if (y > highNum) {
highNum = y;
}
尽管这不适合单个表达式,但也许这表明您的代码有点过分了 complex/unreadable。
如果您只想寻找最大的数字,也许 Math.max 就是您所需要的,即 Math.max(x, y, highNum)
.
简答:
是的,他们是。
长答案:
是的,但您也应该关注可读性。您的代码完全按照您的期望执行,但其他开发人员(也许将来您)可能无法理解这一点,因此我强烈建议您永远不要使用嵌套的三元运算符,并且仅在以下情况下使用它们它比简单的 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”所说,这也没有正确找到最高数字
If x is higher than high num highnum should get assigned the value of x if not. is y bigger? if yes y should be the new highnum. if not. dont change high num
那就是:
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 ;)
}
您可能会错过一个潜在的高值:当 x > highNum
和 y > x
时,您不会看到 y
确实是最高的,因为表达式会已经决定 highNum
应该得到 x
.
你可以用 Math.max
很简单地做到这一点:
highNum = Math.max(x, y, highNum);
您还必须考虑 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;
}
}