回答編集履歴

11

テキスト修正

2020/01/22 01:46

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -200,7 +200,7 @@
200
200
 
201
201
  retrurn trueまたはfalse
202
202
 
203
- });
203
+ })
204
204
 
205
205
  ```
206
206
 
@@ -218,7 +218,7 @@
218
218
 
219
219
  retrurn trueまたはfalse
220
220
 
221
- });
221
+ })
222
222
 
223
223
  ```
224
224
 
@@ -240,7 +240,7 @@
240
240
 
241
241
  return id !== industry_id
242
242
 
243
- });
243
+ })
244
244
 
245
245
  ```
246
246
 
@@ -256,7 +256,7 @@
256
256
 
257
257
  return id !== industry_id
258
258
 
259
- });
259
+ })
260
260
 
261
261
  ```
262
262
 
@@ -310,7 +310,7 @@
310
310
 
311
311
  return +id !== industry_id
312
312
 
313
- });
313
+ })
314
314
 
315
315
  ```
316
316
 
@@ -318,7 +318,7 @@
318
318
 
319
319
  ```javascript
320
320
 
321
- entries.filter(([id]) => +id !== industry_id);
321
+ entries.filter(([id]) => +id !== industry_id)
322
322
 
323
323
  ```
324
324
 
@@ -330,7 +330,7 @@
330
330
 
331
331
  ```javascript
332
332
 
333
- entries.filter(([id]) => id !== `${industry_id}`);
333
+ entries.filter(([id]) => id !== `${industry_id}`)
334
334
 
335
335
  ```
336
336
 

10

テキスト修正

2020/01/22 01:46

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -226,7 +226,7 @@
226
226
 
227
227
 
228
228
 
229
- と書けます。
229
+ と書いて、`id`という変数名で `["1", "スポーツ"]` の `"1"` を受取ります。
230
230
 
231
231
  次に、`// 何らかの判定ロジック` の部分を書いて、その結果を反映して true かfalse を返すようにします。
232
232
 

9

テキスト修正

2020/01/22 00:21

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -454,6 +454,8 @@
454
454
 
455
455
 
456
456
 
457
+ f(["1", "スポーツ"]);
458
+
457
459
  ```
458
460
 
459
461
  と書くことで、`id` と `name` に直接、配列の先頭と2番目の要素が得られます。これは、配列の分割代入を、関数の引数に使った書き方です。分割代入については以下に説明されています。

8

テキスト修正

2020/01/21 23:57

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -190,7 +190,7 @@
190
190
 
191
191
  `["1", "スポーツ"]`
192
192
 
193
- という形、すなわち長さが2で先頭要素が元のオブジェクトのプロパティのキー(文字列です)、二番目の要素がプロパティの値である配列が引数として渡されてくるので、以下のようにすれば、`key`, `value` という変数名で、この配列の要素を受け取れます。
193
+ という形、すなわち長さが2で先頭要素が元のオブジェクトのプロパティのキー(文字列です)、二番目の要素がプロパティの値である配列が引数として渡されてくるので、以下のようにすれば、`key`, `value` という変数名で、この配列の要素を受け取れます。(以下のコードで `[key, value]` という書き方は分割代入と呼ばれ、追記5 に説明しました。)
194
194
 
195
195
  ```javascript
196
196
 

7

テキスト修正

2020/01/21 23:54

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -490,7 +490,7 @@
490
490
 
491
491
 
492
492
 
493
- 上記では、、`Object.entries` で得られる配列を `for ・・・ of`のループで得るときに、`・・・` の部分を`[key, value]` と書くことで分割代入を使い、キーと値を得ています。
493
+ 上記では、、`Object.entries` で得られる配列の要素を `for ・・・ of`のループで得るときに、`・・・` の部分を`[key, value]` と書くことで分割代入を使い、キーと値を得ています。
494
494
 
495
495
 
496
496
 

6

テキスト修正

2020/01/21 23:36

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -392,6 +392,106 @@
392
392
 
393
393
 
394
394
 
395
+ ### 追記5
396
+
397
+
398
+
399
+ もう一点、
400
+
401
+
402
+
403
+ > this.industriesが
404
+
405
+ [[1: "スポーツ"], [2: "メディア"], [3: "建設"]]
406
+
407
+ のようになっていて、
408
+
409
+ .filter(([id]) =>
410
+
411
+ で1,2,3が回るようになる?とすれば、なぜこれで1,2,3が回るのか。
412
+
413
+
414
+
415
+ についてですが、2つの要素を持つ配列 `["1", "スポーツ"]` を引数にとる関数を書くときに、この配列を `ary`という引数で受けて、
416
+
417
+
418
+
419
+ ```javascript
420
+
421
+ const f = (ary) => {
422
+
423
+ const id = ary[0];  // "1"
424
+
425
+ const name = ary[1]; // "スポーツ"
426
+
427
+ ・・・
428
+
429
+ }
430
+
431
+
432
+
433
+ f(["1", "スポーツ"]);
434
+
435
+
436
+
437
+ ```
438
+
439
+ と書くこともできますが、引数の `ary` を `[id, name]` として
440
+
441
+
442
+
443
+ ```javascript
444
+
445
+ const f = ([id, name]) => {
446
+
447
+ console.log(id); //=> "1"
448
+
449
+ console.log(name); //=> "スポーツ"
450
+
451
+ ・・・
452
+
453
+ }
454
+
455
+
456
+
457
+ ```
458
+
459
+ と書くことで、`id` と `name` に直接、配列の先頭と2番目の要素が得られます。これは、配列の分割代入を、関数の引数に使った書き方です。分割代入については以下に説明されています。
460
+
461
+
462
+
463
+ - MDN: [分割代入](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment)
464
+
465
+
466
+
467
+ また、MDNの[Object.entriesの説明](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/entries) の冒頭にも、以下のようなサンプルがあります。
468
+
469
+
470
+
471
+ ```javascript
472
+
473
+ const object1 = {
474
+
475
+ a: 'somestring',
476
+
477
+ b: 42
478
+
479
+ };
480
+
481
+
482
+
483
+ for (let [key, value] of Object.entries(object1)) {
484
+
485
+ console.log(`${key}: ${value}`);
486
+
487
+ }
488
+
489
+ ```
490
+
491
+
492
+
493
+ 上記では、、`Object.entries` で得られる配列を `for ・・・ of`のループで得るときに、`・・・` の部分を`[key, value]` と書くことで分割代入を使い、キーと値を得ています。
494
+
395
495
 
396
496
 
397
497
  以上、参考になれば幸いです。

5

テキスト修正

2020/01/21 23:33

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -152,7 +152,7 @@
152
152
 
153
153
 
154
154
 
155
- すなわち、`this.industries` のプロパティのキーは、 1,2,3 という整数値ではなく、文字列の 1 , 2, 3 として保持されています。
155
+ すなわち、`this.industries` のプロパティのキーは、 1,2,3 という整数値ではなく、文字列の "1" , "2", "3" として保持されています。
156
156
 
157
157
 
158
158
 

4

テキスト修正

2020/01/21 23:07

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -70,24 +70,328 @@
70
70
 
71
71
 
72
72
 
73
+
74
+
75
+
76
+
77
+
78
+
79
+ ### 追記3
80
+
81
+
82
+
83
+
84
+
85
+ 上記の回答は、ご質問にある関数 `fetch_sub_industries` を、ご質問にある意図通りにするための修正案ですが、2つの`<select>` を連動させて、1つ目の `seelct` で選ばれた選択肢を、2つ目の `select` では表示させないようにすることが主目的なのであれば、2つの`select`は両方とも常に`option`を3つ持つようにしておき、1つ目で選ばれた選択肢を2つ目で非表示にするために、CSSの `display` を `none` にするという手もあるかと思います。
86
+
87
+
88
+
89
+ 以下、そのサンプルです。
90
+
91
+
92
+
93
+ - **動作確認用 CodePen: **[https://codepen.io/jun68ykt/pen/QWwzNGL?editors=1010](https://codepen.io/jun68ykt/pen/QWwzNGL?editors=1010)
94
+
95
+
96
+
97
+
98
+
99
+ ### 追記4
100
+
101
+
102
+
103
+
104
+
105
+ コメントから頂きました
106
+
107
+
108
+
109
+ > ソースをみて不明な点があり、
110
+
111
+
112
+
113
+ について回答します。
114
+
115
+
116
+
117
+
118
+
119
+ まず、
120
+
121
+
122
+
123
+ MDNの [JavaScript のデータ型とデータ構造](https://developer.mozilla.org/ja/docs/Web/JavaScript/Data_structures) の中にある、**Object** のセクションのプロパティの説明に、以下のように書かれています。
124
+
125
+
126
+
127
+ > キー値は String 値または Symbol 値です。
128
+
129
+
130
+
131
+ これを確かめるために、
132
+
133
+
134
+
135
+ ```javascript
136
+
137
+ this.industries = { 1: "スポーツ", 2: "メディア", 3: "建設" };
138
+
139
+
140
+
141
+ console.log(Object.keys(this.industries));
142
+
143
+ ```
144
+
145
+
146
+
147
+ とすると、以下で確認できるように、 `[ 1, 2, 3 ]` ではなく、 `["1", "2", "3"]` と表示されます。
148
+
149
+
150
+
151
+ - **動作確認用 CodePen: ** [https://codepen.io/jun68ykt/pen/qBELPgY?editors=0012](https://codepen.io/jun68ykt/pen/qBELPgY?editors=0012)
152
+
153
+
154
+
155
+ すなわち、`this.industries` のプロパティのキーは、 1,2,3 という整数値ではなく、文字列の “1” , “2”, “3” として保持されています。
156
+
157
+
158
+
159
+ 同様に、一番初めに挙げた回答コード
160
+
161
+
162
+
163
+ - **動作確認用 CodePen: ** [https://codepen.io/jun68ykt/pen/JjowGyG?editors=0012](https://codepen.io/jun68ykt/pen/JjowGyG?editors=0012)
164
+
165
+
166
+
167
+ にある、以下の行
168
+
169
+ ```javascript
170
+
171
+ let entries = Object.entries(this.industries);
172
+
173
+ ```
174
+
175
+
176
+
177
+ で得られる `entries` を console.log で表示すると、以下のようになり、エントリーのキーは、"1", "2", "3" と、文字列として取得されてくることが確認できると思います。
178
+
179
+
180
+
181
+ ```
182
+
183
+ [["1", "スポーツ"], ["2", "メディア"], ["3", "建設"]]
184
+
185
+ ```
186
+
187
+
188
+
189
+ 上記の配列 `entries` を filter でループさせるときに、filter の引数として与える関数には、上記の
190
+
191
+ `["1", "スポーツ"]`
192
+
193
+ という形、すなわち長さが2で先頭要素が元のオブジェクトのプロパティのキー(文字列です)、二番目の要素がプロパティの値である配列が引数として渡されてくるので、以下のようにすれば、`key`, `value` という変数名で、この配列の要素を受け取れます。
194
+
195
+ ```javascript
196
+
197
+ entries.filter(([key, value]) => {
198
+
199
+ // 何らかの判定ロジック
200
+
201
+ retrurn trueまたはfalse
202
+
203
+ });
204
+
205
+ ```
206
+
207
+
208
+
209
+ `function fetch_sub_industries(industry_id)` では、プロパティのキーが、`industry_id` と等しいかだけを見ればよいので、`value` は不要で、`key`のほうは id と呼ばれる値なので
210
+
211
+
212
+
213
+ ```javascript
214
+
215
+ entries.filter(([id]) => {
216
+
217
+ // 何らかの判定ロジック
218
+
219
+ retrurn trueまたはfalse
220
+
221
+ });
222
+
223
+ ```
224
+
225
+
226
+
227
+
228
+
229
+ と書けます。
230
+
231
+ 次に、`// 何らかの判定ロジック` の部分を書いて、その結果を反映して true かfalse を返すようにします。
232
+
233
+ `id` が `function fetch_sub_industries` に渡される `industry_id` に等しくない場合にのみ、filter によって残されればよいので、
234
+
235
+
236
+
237
+ ```javascript
238
+
239
+ entries.filter(([id]) => {
240
+
241
+ return id !== industry_id
242
+
243
+ });
244
+
245
+ ```
246
+
247
+ と書けばよさそうですが、これだと、うまくいきません。
248
+
249
+ なぜなら、関数`fetch_sub_industries` の引数 `industry_id` のほうは文字列ではなく、たとえば `1` だったりの整数が渡され、他方、
250
+
251
+
252
+
253
+ ```javascript
254
+
255
+ entries.filter(([id]) => {
256
+
257
+ return id !== industry_id
258
+
259
+ });
260
+
261
+ ```
262
+
263
+ と書いた場合の filter のループで呼ばれる関数の引数(の配列要素の) `id` には `"1"` だったりの文字列が渡されてくるため、
264
+
265
+
266
+
267
+ ```
268
+
269
+ id !== industry_id
270
+
271
+ ```
272
+
273
+ は(両辺の型が違うので、値を比較するまでもなく、)必ずtrueになります。したがって `fetch_sub_industries(1)` としたときも `["1", "スポーツ"]` が除外されず、結果として`this.industries` は元のオブジェクトの3つのエントリ(キーと値の組)をどれも持つものとなってしまいます。以下で確認できます。
274
+
275
+
276
+
277
+ - **動作確認用 CodePen: ** [https://codepen.io/jun68ykt/pen/rNaoYjJ?editors=0012](https://codepen.io/jun68ykt/pen/rNaoYjJ?editors=0012)
278
+
279
+
280
+
281
+
282
+
283
+ `!==` によって意図した判定が行われるには、両辺の型を揃える必要がありますが、回答のコードでは、関数`fetch_sub_industries` の引数`industry_id`は整数値が渡されることを前提として、両辺を数値にあわせることにしました。そのためには filter のループで使われる `id` のほうを文字列から数値に変換しなければなりません。数字の文字列である `id` を数値に変換する方法としては、`Number(id)` や `parseInt(id)` (より厳密には、`parseInt(id, 10)` ) とすればよいですが、もっと簡単に書く方法として
284
+
285
+
286
+
287
+ ```
288
+
289
+ +id
290
+
291
+ ```
292
+
293
+
294
+
295
+ と書くことでも数値が得られます。 これにより、`id` がたとえば `"1"` ならば、数値の `1` が得られます。このような `+` は単項加算(unary plus)と呼ばれます。以下は MDN の単項加算の説明です。
296
+
297
+
298
+
299
+ - MDN: [単項加算 (+)](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Unary_plus_)
300
+
301
+
302
+
303
+ 単項加算を使って、`!==` の両辺を数値にあわせて、
304
+
305
+
306
+
307
+ ```javascript
308
+
309
+ entries.filter(([id]) => {
310
+
311
+ return +id !== industry_id
312
+
313
+ });
314
+
315
+ ```
316
+
317
+ とすれば、意図通りに filter が機能します。さらに、アロー関数の本体が1行であり return で値を返しているので、上記を詰めて、
318
+
319
+ ```javascript
320
+
321
+ entries.filter(([id]) => +id !== industry_id);
322
+
323
+ ```
324
+
325
+ と書いたものが、回答に挙げたコードになります。
326
+
327
+
328
+
329
+ ちなみに、もし、`id` の型に合わせて、文字列の比較にするならば、`industry_id` のほうを文字列にする必要があるので、たとえば
330
+
331
+ ```javascript
332
+
333
+ entries.filter(([id]) => id !== `${industry_id}`);
334
+
335
+ ```
336
+
337
+ のようにします。
338
+
339
+ - **動作確認用 CodePen: ** [https://codepen.io/jun68ykt/pen/vYEvWpB?editors=0012](https://codepen.io/jun68ykt/pen/vYEvWpB?editors=0012)
340
+
341
+
342
+
343
+
344
+
345
+ 上記のように、厳密な比較の `!==` を使うと、数値か文字列のいずれかに型を合わせる必要がありますが、これがやや煩雑と思えば、厳密でない比較の `!=` を使って
346
+
347
+
348
+
349
+ ```javascript
350
+
351
+ id != industry_id
352
+
353
+ ```
354
+
355
+
356
+
357
+ と書くことで、文字列である `id` のほうが、数値(Number型)に変換されてから、その値が、`industry_id` と等しくないかを判定します。`!==` と `!=` の違い(あるいは `===` と `==` の違い)を確認するには、以下に説明があります。
358
+
359
+
360
+
361
+ - MDN: [等価演算子の使用](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Comparison_Operators#Using_the_equality_operators)
362
+
363
+
364
+
365
+
366
+
367
+ 上記のような場合、 `id` と `industry_id` とで、いずれかの型を他方に、(たとえば上記のように `id` に単項加算を追加して、)明示的に合わせて `===` や `!==` で比較したほうがよいのか、あるいは `==` や `!=` を使って、型を明示的に合わせることを不要にして比較するほうがよいのかについては、「時と場合による」という考え方もできますが、ひとつのガイドとして、javascript のコードチェックツールの ESLint の様々なルールの中に
368
+
369
+
370
+
371
+ - `==` および `!=` は使わないようにして、 `===` および `!==` を使うべき
372
+
373
+
374
+
375
+ という、以下のルール
376
+
377
+
378
+
379
+ - ESLint: [Require === and !== (eqeqeq)](https://eslint.org/docs/rules/eqeqeq)
380
+
381
+
382
+
383
+ > It is considered good practice to use the type-safe equality operators === and !== instead of their regular counterparts == and !=.
384
+
385
+
386
+
387
+ があります。ですので、(私もそうですが)ふだん ESLint を効かせながらコードを書いていると、 `!=` を使った
388
+
389
+ `id != industry_id`
390
+
391
+ というコードを書くとESLintに警告されるので、型を合わせて `===` および `!==` を使うほうに慣れてきます。(実際私は、ここ数年、業務では `==` および `!=` をほとんど使ってないです。)
392
+
393
+
394
+
395
+
396
+
73
397
  以上、参考になれば幸いです。
74
-
75
-
76
-
77
-
78
-
79
- ### 追記3
80
-
81
-
82
-
83
-
84
-
85
- 上記の回答は、ご質問にある関数 `fetch_sub_industries` を、ご質問にある意図通りにするための修正案ですが、2つの`<select>` を連動させて、1つ目の `seelct` で選ばれた選択肢を、2つ目の `select` では表示させないようにすることが主目的なのであれば、2つの`select`は両方とも常に`option`を3つ持つようにしておき、1つ目で選ばれた選択肢を2つ目で非表示にするために、CSSの `display` を `none` にするという手もあるかと思います。
86
-
87
-
88
-
89
- 以下、そのサンプルです。
90
-
91
-
92
-
93
- - **動作確認用 CodePen: **[https://codepen.io/jun68ykt/pen/QWwzNGL?editors=1010](https://codepen.io/jun68ykt/pen/QWwzNGL?editors=1010)

3

テキスト修正

2020/01/21 23:04

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -71,3 +71,23 @@
71
71
 
72
72
 
73
73
  以上、参考になれば幸いです。
74
+
75
+
76
+
77
+
78
+
79
+ ### 追記3
80
+
81
+
82
+
83
+
84
+
85
+ 上記の回答は、ご質問にある関数 `fetch_sub_industries` を、ご質問にある意図通りにするための修正案ですが、2つの`<select>` を連動させて、1つ目の `seelct` で選ばれた選択肢を、2つ目の `select` では表示させないようにすることが主目的なのであれば、2つの`select`は両方とも常に`option`を3つ持つようにしておき、1つ目で選ばれた選択肢を2つ目で非表示にするために、CSSの `display` を `none` にするという手もあるかと思います。
86
+
87
+
88
+
89
+ 以下、そのサンプルです。
90
+
91
+
92
+
93
+ - **動作確認用 CodePen: **[https://codepen.io/jun68ykt/pen/QWwzNGL?editors=1010](https://codepen.io/jun68ykt/pen/QWwzNGL?editors=1010)

2

テキスト修正

2020/01/21 14:27

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- `filter`を使うのであれば、以下のようにすればよいかと思います。
5
+ ご質問に挙げられているコードの意図に沿って、関数 `fetch_sub_industries` は、 `this.industries` を新しいオブジェクトで書き換えるものとします。この前提で、`filter`を使うのであれば、以下のようにすればよいかと思います。
6
6
 
7
7
 
8
8
 
@@ -12,17 +12,15 @@
12
12
 
13
13
  let entries = Object.entries(this.industries);
14
14
 
15
- entries = entries.filter(([id, name]) => +id !== industry_id);
15
+ entries = entries.filter(([id]) => +id !== industry_id);
16
16
 
17
- return Object.fromEntries(entries);
17
+ this.industries = Object.fromEntries(entries);
18
18
 
19
19
  }
20
20
 
21
-
22
-
23
21
  ```
24
22
 
25
- - **動作確認用 CodePen: **[https://codepen.io/jun68ykt/pen/eYmbNQR?editors=0012](https://codepen.io/jun68ykt/pen/eYmbNQR?editors=0012)
23
+ - **動作確認用 CodePen: **[https://codepen.io/jun68ykt/pen/JjowGyG?editors=0012](https://codepen.io/jun68ykt/pen/JjowGyG?editors=0012)
26
24
 
27
25
 
28
26
 
@@ -38,13 +36,37 @@
38
36
 
39
37
  function fetch_sub_industries(industry_id) {
40
38
 
41
- return _.omit(this.industries, industry_id);
39
+ this.industries = _.omit(this.industries, industry_id);
42
40
 
43
41
  }
44
42
 
45
43
  ```
46
44
 
47
- - **動作確認用 CodePen: **[https://codepen.io/jun68ykt/pen/qBELOaL?editors=0012](https://codepen.io/jun68ykt/pen/qBELOaL?editors=0012)
45
+ - **動作確認用 CodePen: **[https://codepen.io/jun68ykt/pen/wvBRMqj?editors=0012](https://codepen.io/jun68ykt/pen/wvBRMqj?editors=0012)
46
+
47
+
48
+
49
+ ### 追記2
50
+
51
+
52
+
53
+ 新しいオブジェクトを作って、`this.industries` に再度代入するのではなく、現状の `this.industries` から、単に `industry_id` で指定されるプロパティを除去すればよいのであれば、以下でもよいかと思います。
54
+
55
+
56
+
57
+ ```javascript
58
+
59
+ function fetch_sub_industries(industry_id) {
60
+
61
+ delete this.industries[industry_id];
62
+
63
+ }
64
+
65
+ ```
66
+
67
+ - **動作確認用 CodePen: **[https://codepen.io/jun68ykt/pen/abzPdgm?editors=0012](https://codepen.io/jun68ykt/pen/abzPdgm?editors=0012)
68
+
69
+
48
70
 
49
71
 
50
72
 

1

テキスト修正

2020/01/21 13:49

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -22,4 +22,30 @@
22
22
 
23
23
  ```
24
24
 
25
- - 動作確認用 CodePen: [https://codepen.io/jun68ykt/pen/eYmbNQR?editors=0012](https://codepen.io/jun68ykt/pen/eYmbNQR?editors=0012)
25
+ - **動作確認用 CodePen: **[https://codepen.io/jun68ykt/pen/eYmbNQR?editors=0012](https://codepen.io/jun68ykt/pen/eYmbNQR?editors=0012)
26
+
27
+
28
+
29
+ ### 追記
30
+
31
+
32
+
33
+ 配列やオブジェクトの操作で便利なライブラリ lodash の [_.omit](https://lodash.com/docs/#omit) を使うと、以下のように手短かに書けます。
34
+
35
+
36
+
37
+ ```javascript
38
+
39
+ function fetch_sub_industries(industry_id) {
40
+
41
+ return _.omit(this.industries, industry_id);
42
+
43
+ }
44
+
45
+ ```
46
+
47
+ - **動作確認用 CodePen: **[https://codepen.io/jun68ykt/pen/qBELOaL?editors=0012](https://codepen.io/jun68ykt/pen/qBELOaL?editors=0012)
48
+
49
+
50
+
51
+ 以上、参考になれば幸いです。