回答編集履歴

5

 

2022/12/10 01:47

投稿

退会済みユーザー
test 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
- return arr.some((arrVal) => val === arrVal);
111
+ return arr.some((arrVal) => val === arrVal);
106
- }
112
+ }
107
- const chk2 =checkAvailability(fruits, 'banana');
113
+ const chk2 =checkAvailability(fruits, 'banana');
108
- console.log(chk2);
114
+ console.log(chk2);
109
115
  }
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
- arr.some((arrVal) => val === arrVal);
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

 

2022/12/10 01:42

投稿

退会済みユーザー
test CHANGED
@@ -45,7 +45,8 @@
45
45
  ```
46
46
  fruits apple, banana, mango, guava
47
47
  ```
48
+ と表示されてしまいます。
48
- と表示されてしまいます。(ただしこれはあくまで表示だけで、内部の配列の構造が変わっているわけではありません。またこのようになるのは、現時点のGASエディタ特有の現象であり、他の処理系では必ずしも同様になるとは限りません)
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
- ※誤解しないでいただきたいのですが、console.log の中で+記号で文字列連結すること自体は特に間違ではありません。配列の形を確認する際に+記号で連結して実行すると、現時点のGASエディタでは、出力結果が実際の配列の構造と異なてしまうという点に注意してほしいということです。
74
+ ただ、現時点GASエディタ、console.log()配列の形を確認する際に+記号で連結すると、実際の配列の構造と異なる形で表示されてしまうという点に注意してほしいということです。
73
75
 
74
76
   
75
77
  **ポイント2.someで比較している対象**

3

 

2022/12/10 01:37

投稿

退会済みユーザー
test CHANGED
@@ -23,7 +23,7 @@
23
23
  ```
24
24
 
25
25
  **ポイント1.getValues() で取得したデータの形を正しく確認する方法。**
26
- → GASでは、**console.log の中で+記号等で文字列連結しない**
26
+ 配列の形を確認する場合は、GASではconsole.log の中で+記号等で文字列連結しない
27
27
 
28
28
  まず、OKバージョンとNGバージョンで出力結果が同じであるにもかかわらず、NGでは期待した結果が得られなかったのが、そもそもの疑問点であると理解しました。この点について説明します。
29
29
 

2

 

2022/12/10 01:36

投稿

退会済みユーザー
test CHANGED
@@ -23,7 +23,9 @@
23
23
  ```
24
24
 
25
25
  **ポイント1.getValues() で取得したデータの形を正しく確認する方法。**
26
- → **console.log の中で+記号等で文字列連結しない**
26
+ GASでは、**console.log の中で+記号等で文字列連結しない**
27
+
28
+ まず、OKバージョンとNGバージョンで出力結果が同じであるにもかかわらず、NGでは期待した結果が得られなかったのが、そもそもの疑問点であると理解しました。この点について説明します。
27
29
 
28
30
  元の質問文では、
29
31
  ```js
@@ -43,29 +45,33 @@
43
45
  ```
44
46
  fruits apple, banana, mango, guava
45
47
  ```
46
- と表示されてしまいます。
48
+ と表示されてしまいます。(ただしこれはあくまで表示だけで、内部の配列の構造が変わっているわけではありません。またこのようになるのは、現時点のGASエディタ特有の現象であり、他の処理系では必ずしも同様になるとは限りません)
47
49
 
50
+ ここは、
51
+ ```js
48
- ここは、console.log(fruits);
52
+ console.log(fruits);
53
+ ```
49
- というように、**形を確認したい変数だけ入れる**ことで、
54
+ ように、**console.log関数の括弧の中に形を確認したい変数だけ入れる**ことで、
50
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
- >> y= [ [ ['apple'], ['banana'], ['mango'], ['guava'] ] ]
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

 

2022/12/10 00:21

投稿

退会済みユーザー
test CHANGED
@@ -32,12 +32,12 @@
32
32
  というように、console.log の中で 'fruits' という文字列と、配列 fruits が連結されています。
33
33
  しかし、**console.log で 文字列と配列を+記号で連結してしまうと、配列の正しい形を確認することができません。**
34
34
 
35
- 具体的に言うと、 getValues()によって取得した配列fruitsは、
35
+ 具体的に言うと、 fruitsは、
36
- [['apple'], ['banana'], ['mango'], ['guava']]
36
+ [[['apple'], ['banana'], ['mango'], ['guava']]]
37
- のような形(配列の中に配列が入れ子になった二次元配列)になっていますが、
37
+ のような形(配列の中に配列が入れ子になった3重の配列)になっていますが、
38
38
  他の文字列と配列を+記号で連結して
39
39
  ```js
40
- console.log("fruits " + 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,7 +62,9 @@
62
62
  // 出力結果
63
63
  >> y= [ [ ['apple'], ['banana'], ['mango'], ['guava'] ] ]
64
64
  ```
65
+
65
66
  ※誤解しないでいただきたいのですが、console.log の中で+記号で文字列連結をすること自体は特に間違いではありません。配列の形を確認する際に+記号で連結して実行すると、出力結果が実際の配列の構造と異なってしまうという点に注意してほしいということです。
67
+
66
68
 
67
69
  **ポイント2.someで比較している対象**
68
70
  下記は、元のNGバージョンのコードで
@@ -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する前)は