回答編集履歴
5
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
test
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
test
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
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
|
-
|
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
test
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,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する前)は
|