30529


fizzBuzz関数中、ライン23の`||`の前後の動作を教えて頂きたいです。  
`[i % 15] || i`の部分です。

*コンソールの結果は、コメントしてあるfizzBuzz関数と同じになりました。
[code]

    function start(x) {
        fizzBuzz(x);
    }
    
    // function fizzBuzz(x) { // REG!
    //     var i = 0;
    //     for (i = 1; i <= x; i++) {
    //         if (i % 3 === 0 && i % 5 === 0) {
    //             console.log("fizzbuzz");
    //         } else if (i % 3 === 0) {
    //             console.log("fizz");
    //         } else if (i % 5 === 0) {
    //             console.log("buzz");
    //         } else {
    //             console.log(i);
    //         }
    //     }
    // }
    
    function fizzBuzz(max) {
        var F = 'Fizz', B = 'Buzz';
        for (var i = 1; i <= max; i++) {
            console.log([F+B,0,0,F,0,B,F,0,0,F,B,0,F,0,0][i % 15] || i);
        }
    }
    
[/code]


CC BY-SA 4.0
2016-11-19T04:13:59.870
30524
2021-12-11T06:32:32.157
2021-12-11T06:32:32.157
3060
18632
question
javascript
JavaScript の配列で `[要素,...][要素] || 要素` の動作がわからない


まず`[F+B,0,0,F,0,B,F,0,0,F,B,0,F,0,0]`はFizzBuzzの0から14に対する結果を収めた配列です。  
次にこの配列から`i % 15`番目の要素(`value`)を取り出しています。  
最後に`|| i`ですが、JavaScriptの`||`演算子は左辺が`true`と見なせる場合は左辺の値を、そうでなければ右辺の値を返す操作ですので`0
|| i`は`i`になります。  
ですので23行の内容は冗長に書くと以下のような処理になります。

[code]

    var array = [F+B,0,0,F,0,B,F,0,0,F,B,0,F,0,0];
    var value = array[i % 15];
    if (value !== 0) {
        console.log(value);
    } else {
        console.log(i);
    }
    
[/code]


CC BY-SA 3.0
2016-11-19T05:04:52.810
30529
2016-11-19T05:04:52.810
5750
30524
answer