2

幸せな感謝祭のすべて:

私は30分間この問題に頭を悩ませてきましたが、条件文がどこに向かっているのかよくわかりません。私はそれを理解したと思いますが、プロが実行したかっただけです。

(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

投稿や説明を数値化してくれて本当に感謝しています。再度、感謝します。

4

2 に答える 2

3

三項演算子には右から左への結合性があります。これは、式がと同じであることを意味します。

(i%3) ? ((i%5) ? i : 'Buzz') : ((i%5) ? 'Fizz' : 'FizzBuzz')

または、次のように故障します

1st ? ( 2nd ) : ( 2nd )

2つの2nd部分も3値であるという事実は、最初の部分のプロセスに影響を与えません。

于 2012-11-23T03:44:43.153 に答える
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'

(基本的にあなたがあなたの質問に書いたものなので、あなたの解釈は正しいです)

:パターンを確認できるように、を別々の行に配置するのに役立ちます。また、をに合わせて、?どれ:がどのグループにグループ化されているかを確認しました。

于 2012-11-23T03:46:23.110 に答える