感恩节快乐:
我一直在围绕这一个人绞尽脑汁半小时,并且无法完全摆脱条件限制所在。我想我已经把它弄下来,但只是想由专业人员来管理它。 / p>
(i%3)?(i%5)?i:'Buzz':(i%5)?'Fizz':'FizzBuzz'
它分解为以下内容:
if ((i%3) == false) {
if ((i%5) == false) {
console.log("FizzBuzz");
} else {
console.log('Fizz');
}
} else {
if ((i%5) == false) {
console.log("Buzz");
} else {
console.log(i);
}
}
我假设三元运算符按以下方式分组(我习惯于在典型的结果中看到三元运算符?a:b 时尚,所以额外的结果和条件让我失望)
(i%3)?
//if the condition is not a multiple of 3
//check if it is a multiple of 5
//if it isn't, log the number
//otherwise log "Buzz"
(i%5)?i:'Buzz'
//if the condition is a multiple of 3
//check if it is a multiple of 5
:(i%5)?
//if it is log "Fizz",
//otherwise i is a multiple of 3 & 5 -
//log "FizzBuzz"
'Fizz':'FizzBuzz
我非常感谢任何量化帖子和/或澄清。 再次感谢。
答案 0 :(得分:3)
三元运算符具有right-to-left associativity,这意味着表达式与
相同(i%3) ? ((i%5) ? i : 'Buzz') : ((i%5) ? 'Fizz' : 'FizzBuzz')
或者它以下列方式崩溃
1st ? ( 2nd ) : ( 2nd )
两个2nd
件也是三元的这一事实对第一件的过程没有影响。
答案 1 :(得分:1)
在C的传统中,三元运算符并非真正var ? var : var
。事实上是这样的:
statement ? statement : statement
这意味着,代替变量或值,您可以将代码放在那里进行评估,并将该代码的返回值作为值。所以,
(i%3)?(i%5)?i:'Buzz':(i%5)?'Fizz':'FizzBuzz'
分解为:
(i%3) ?
(i%5) ?
i
:
'Buzz'
:
(i%5) ?
'Fizz'
:
'FizzBuzz'
(基本上是你在问题中写的,所以你的解释是正确的)
它有助于将:
放在单独的行中,以便您可以看到模式。我还将?
与:
对齐,以查看哪个与哪个组合。