回答編集履歴
5
    
        answer	
    CHANGED
    
    | @@ -101,21 +101,36 @@ | |
| 101 101 | 
             
            fruits はさらに []の中に myValueをpushしたものになっているからです(3重の入れ子)
         | 
| 102 102 |  | 
| 103 103 | 
             
            ```js
         | 
| 104 | 
            +
            function myFunction2() {
         | 
| 105 | 
            +
              const ss = SpreadsheetApp.getActiveSpreadsheet();
         | 
| 106 | 
            +
              const sheet = ss.getActiveSheet();
         | 
| 107 | 
            +
              const fruits = [];
         | 
| 108 | 
            +
              const myValue = sheet.getRange(4,9,4,1).getValues();
         | 
| 109 | 
            +
              fruits.push(myValue);
         | 
| 104 | 
            -
            function checkAvailability(arr, val) {
         | 
| 110 | 
            +
              function checkAvailability(arr, val) {
         | 
| 105 | 
            -
             | 
| 111 | 
            +
                return arr.some((arrVal) => val === arrVal);
         | 
| 112 | 
            +
              }
         | 
| 113 | 
            +
              const chk2 =checkAvailability(fruits, 'banana');
         | 
| 114 | 
            +
              console.log(chk2);
         | 
| 106 115 | 
             
            }
         | 
| 107 | 
            -
            const chk2 =checkAvailability(fruits, 'banana');
         | 
| 108 | 
            -
            console.log(chk2);
         | 
| 109 | 
            -
            }
         | 
| 110 116 | 
             
            ```
         | 
| 111 | 
            -
            とした場合、 checkAvailability のarr には 
         | 
| 117 | 
            +
            上はNGバージョンと同じコードですが、上のコードを実行した場合、 checkAvailability のarr には 
         | 
| 118 | 
            +
            myValue すなわち
         | 
| 119 | 
            +
            ```
         | 
| 112 120 | 
             
            [[['apple'], ['banana'], ['mango'], ['guava']]]
         | 
| 121 | 
            +
            ```
         | 
| 113 122 | 
             
            という3重の入れ子になった配列が渡され、
         | 
| 123 | 
            +
            ```js
         | 
| 114 | 
            -
             | 
| 124 | 
            +
              arr.some((arrVal) => val === arrVal);
         | 
| 125 | 
            +
            ```
         | 
| 115 126 | 
             
            の arrVal という引数には、
         | 
| 127 | 
            +
            ```
         | 
| 116 128 | 
             
            [[['apple'], ['banana'], ['mango'], ['guava']]]
         | 
| 129 | 
            +
            ```
         | 
| 117 130 | 
             
            の1つ内側の要素
         | 
| 131 | 
            +
            ```
         | 
| 118 132 | 
             
            [['apple'], ['banana'], ['mango'], ['guava']]
         | 
| 133 | 
            +
            ```
         | 
| 119 134 | 
             
            が渡されることになります。
         | 
| 120 135 |  | 
| 121 136 | 
             
            結果
         | 
4
    
        answer	
    CHANGED
    
    | @@ -45,7 +45,8 @@ | |
| 45 45 | 
             
            ```
         | 
| 46 46 | 
             
            fruits apple, banana, mango, guava
         | 
| 47 47 | 
             
            ```
         | 
| 48 | 
            +
            と表示されてしまいます。
         | 
| 48 | 
            -
             | 
| 49 | 
            +
            (ただしこれはあくまで表示だけで、内部の配列の構造が変わっているわけではありません。またこのようになるのは、現時点のGASエディタ特有の現象であり、他の処理系では必ずしも同様になるとは限りません)
         | 
| 49 50 |  | 
| 50 51 | 
             
            ここは、
         | 
| 51 52 | 
             
            ```js
         | 
| @@ -69,7 +70,8 @@ | |
| 69 70 | 
             
            >>  y=  [ [ ['apple'], ['banana'], ['mango'], ['guava'] ] ]
         | 
| 70 71 | 
             
            ```
         | 
| 71 72 |  | 
| 73 | 
            +
            ※誤解しないでいただきたいのですが、console.log の中で+記号で文字列連結をすること自体は特に間違いではありません。
         | 
| 72 | 
            -
             | 
| 74 | 
            +
            ただ、現時点のGASエディタでは、console.log()を用いて配列の形を確認する際に+記号で連結すると、実際の配列の構造と異なる形で表示されてしまうという点に注意してほしい、ということです。
         | 
| 73 75 |  | 
| 74 76 |  | 
| 75 77 | 
             
            **ポイント2.someで比較している対象**
         | 
3
    
        answer	
    CHANGED
    
    | @@ -23,7 +23,7 @@ | |
| 23 23 | 
             
            ```
         | 
| 24 24 |  | 
| 25 25 | 
             
            **ポイント1.getValues() で取得したデータの形を正しく確認する方法。**
         | 
| 26 | 
            -
            → GASでは | 
| 26 | 
            +
            → 配列の形を確認する場合は、GASではconsole.log の中で+記号等で文字列連結しない。
         | 
| 27 27 |  | 
| 28 28 | 
             
            まず、OKバージョンとNGバージョンで出力結果が同じであるにもかかわらず、NGでは期待した結果が得られなかったのが、そもそもの疑問点であると理解しました。この点について説明します。
         | 
| 29 29 |  | 
2
    
        answer	
    CHANGED
    
    | @@ -23,8 +23,10 @@ | |
| 23 23 | 
             
            ```
         | 
| 24 24 |  | 
| 25 25 | 
             
            **ポイント1.getValues() で取得したデータの形を正しく確認する方法。**
         | 
| 26 | 
            -
            → **console.log の中で+記号等で文字列連結しない**
         | 
| 26 | 
            +
            → GASでは、**console.log の中で+記号等で文字列連結しない**
         | 
| 27 27 |  | 
| 28 | 
            +
            まず、OKバージョンとNGバージョンで出力結果が同じであるにもかかわらず、NGでは期待した結果が得られなかったのが、そもそもの疑問点であると理解しました。この点について説明します。
         | 
| 29 | 
            +
             | 
| 28 30 | 
             
             元の質問文では、
         | 
| 29 31 | 
             
            ```js
         | 
| 30 32 | 
             
            console.log("fruits " + fruits);
         | 
| @@ -43,29 +45,33 @@ | |
| 43 45 | 
             
            ```
         | 
| 44 46 | 
             
            fruits apple, banana, mango, guava
         | 
| 45 47 | 
             
            ```
         | 
| 46 | 
            -
            と表示されてしまいます。
         | 
| 48 | 
            +
            と表示されてしまいます。(ただしこれはあくまで表示だけで、内部の配列の構造が変わっているわけではありません。またこのようになるのは、現時点のGASエディタ特有の現象であり、他の処理系では必ずしも同様になるとは限りません)
         | 
| 47 49 |  | 
| 50 | 
            +
            ここは、
         | 
| 51 | 
            +
            ```js
         | 
| 48 | 
            -
             | 
| 52 | 
            +
            console.log(fruits);
         | 
| 49 | 
            -
            というように、**形を確認したい変数だけ入れる**ことで、
         | 
| 50 53 | 
             
            ```
         | 
| 54 | 
            +
            のように、**console.log関数の括弧の中に形を確認したい変数だけ入れる**ことで、
         | 
| 55 | 
            +
            ```
         | 
| 51 56 | 
             
            [ [ ['apple'], ['banana'], ['mango'], ['guava'] ] ]
         | 
| 52 57 | 
             
            ```
         | 
| 53 58 | 
             
            とそのままの形で出力されます。
         | 
| 54 59 |  | 
| 55 | 
            -
            または、**出力したい項目をカンマで区切る**ことでも同じようにそのまま出力できます。
         | 
| 60 | 
            +
            または、**出力したい文字列・項目をカンマで区切って指定する**ことでも同じようにそのまま出力できます。
         | 
| 56 61 | 
             
            ```js
         | 
| 57 62 | 
             
            const x = [['apple'], ['banana'], ['mango'], ['guava']];
         | 
| 58 63 | 
             
            const y = [];
         | 
| 59 64 | 
             
            y.push(x);
         | 
| 60 | 
            -
            console.log('y=', y);
         | 
| 65 | 
            +
            console.log('x=', x, '\n', 'y=', y); //'\n'は改行
         | 
| 61 66 |  | 
| 62 | 
            -
             | 
| 67 | 
            +
            出力結果
         | 
| 68 | 
            +
            >> x=  [ ['apple'], ['banana'], ['mango'], ['guava'] ]
         | 
| 63 | 
            -
            >> | 
| 69 | 
            +
            >>  y=  [ [ ['apple'], ['banana'], ['mango'], ['guava'] ] ]
         | 
| 64 70 | 
             
            ```
         | 
| 65 71 |  | 
| 66 | 
            -
            ※誤解しないでいただきたいのですが、console.log の中で+記号で文字列連結をすること自体は特に間違いではありません。配列の形を確認する際に+記号で連結して実行すると、出力結果が実際の配列の構造と異なってしまうという点に注意してほしいということです。
         | 
| 72 | 
            +
            ※誤解しないでいただきたいのですが、console.log の中で+記号で文字列連結をすること自体は特に間違いではありません。配列の形を確認する際に+記号で連結して実行すると、現時点のGASエディタでは、出力結果が実際の配列の構造と異なってしまうという点に注意してほしいということです。
         | 
| 67 73 |  | 
| 68 | 
            -
             | 
| 74 | 
            +
             
         | 
| 69 75 | 
             
            **ポイント2.someで比較している対象**
         | 
| 70 76 | 
             
            下記は、元のNGバージョンのコードで
         | 
| 71 77 | 
             
            console.log('fruits'+fruits);を
         | 
1
    
        answer	
    CHANGED
    
    | @@ -32,12 +32,12 @@ | |
| 32 32 | 
             
            というように、console.log の中で 'fruits' という文字列と、配列 fruits が連結されています。
         | 
| 33 33 | 
             
            しかし、**console.log で 文字列と配列を+記号で連結してしまうと、配列の正しい形を確認することができません。**
         | 
| 34 34 |  | 
| 35 | 
            -
            具体的に言うと、  | 
| 35 | 
            +
            具体的に言うと、 fruitsは、
         | 
| 36 | 
            -
            [['apple'], ['banana'], ['mango'], ['guava']]
         | 
| 36 | 
            +
            [[['apple'], ['banana'], ['mango'], ['guava']]]
         | 
| 37 | 
            -
            のような形(配列の中に配列が入れ子になった | 
| 37 | 
            +
            のような形(配列の中に配列が入れ子になった3重の配列)になっていますが、
         | 
| 38 38 | 
             
            他の文字列と配列を+記号で連結して
         | 
| 39 39 | 
             
            ```js
         | 
| 40 | 
            -
            console.log("fruits | 
| 40 | 
            +
            console.log("fruits" + fruits);
         | 
| 41 41 | 
             
            ```
         | 
| 42 42 | 
             
            としてしまうと、**表示上**は入れ子が外れて、質問内の画像にあるように
         | 
| 43 43 | 
             
            ```
         | 
| @@ -48,7 +48,7 @@ | |
| 48 48 | 
             
            ここは、console.log(fruits);
         | 
| 49 49 | 
             
            というように、**形を確認したい変数だけ入れる**ことで、
         | 
| 50 50 | 
             
            ```
         | 
| 51 | 
            -
            [[['apple'], ['banana'], ['mango'], ['guava']]]
         | 
| 51 | 
            +
            [ [ ['apple'], ['banana'], ['mango'], ['guava'] ] ]
         | 
| 52 52 | 
             
            ```
         | 
| 53 53 | 
             
            とそのままの形で出力されます。
         | 
| 54 54 |  | 
| @@ -62,8 +62,10 @@ | |
| 62 62 | 
             
            // 出力結果
         | 
| 63 63 | 
             
            >> y=  [ [ ['apple'], ['banana'], ['mango'], ['guava'] ] ]
         | 
| 64 64 | 
             
            ```
         | 
| 65 | 
            +
             | 
| 65 66 | 
             
            ※誤解しないでいただきたいのですが、console.log の中で+記号で文字列連結をすること自体は特に間違いではありません。配列の形を確認する際に+記号で連結して実行すると、出力結果が実際の配列の構造と異なってしまうという点に注意してほしいということです。
         | 
| 66 67 |  | 
| 68 | 
            +
             | 
| 67 69 | 
             
            **ポイント2.someで比較している対象**
         | 
| 68 70 | 
             
            下記は、元のNGバージョンのコードで
         | 
| 69 71 | 
             
            console.log('fruits'+fruits);を
         | 
| @@ -111,6 +113,7 @@ | |
| 111 113 | 
             
            結果
         | 
| 112 114 | 
             
            `[['apple'], ['banana'], ['mango'], ['guava']]` と `'banana'` が等しいかどうかを1回だけ比較することになってしまい、これはfalse(等しくない)となります。
         | 
| 113 115 |  | 
| 116 | 
            +
             | 
| 114 117 | 
             
            **ポイント3.flat() 関数**
         | 
| 115 118 |  | 
| 116 119 | 
             
            ポイント2で、 getValues で得た myValue (fruitsにpushする前)は
         | 
