回答編集履歴

58

テキスト追加

2018/08/20 01:09

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -232,9 +232,9 @@
232
232
 
233
233
    
234
234
 
235
- `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに、caseあるいはifの数に比例した時間がかかります。(計算量のオーダーが __O(n)__ である、と言ったります。 )つまり、`FFFFF`から`TTTTT`まですべてのケースは32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当する処理が決まるということがあり得ます。
236
-
237
- これを避けたいので、私がもし業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにするでしょう。
235
+ `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに、caseあるいはifの数に比例した時間がかかります。(計算量のオーダーが __O(n)__ である、と言ったります。 ) 言い換えると、`FFFFF`から`TTTTT`まですべてのケースは2の5乗で32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当する処理が決まるということがあり得ます。
236
+
237
+ これを避けたいので、私がもし業務上でのご質問同様の課題に遭遇したら、おそらく以下のコードをベースにするでしょう。
238
238
 
239
239
  ```javascript
240
240
 

57

テキスト修正

2018/08/20 01:09

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -234,7 +234,7 @@
234
234
 
235
235
  `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに、caseあるいはifの数に比例した時間がかかります。(計算量のオーダーが __O(n)__ である、と言ったります。 )つまり、`FFFFF`から`TTTTT`まですべてのケースは32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当する処理が決まるということがあり得ます。
236
236
 
237
- これを避けたいので、私がもし業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにするだろと思います
237
+ これを避けたいので、私がもし業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにするでしょう。
238
238
 
239
239
  ```javascript
240
240
 

56

テキスト修正

2018/08/19 23:57

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -234,7 +234,7 @@
234
234
 
235
235
  `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに、caseあるいはifの数に比例した時間がかかります。(計算量のオーダーが __O(n)__ である、と言ったります。 )つまり、`FFFFF`から`TTTTT`まですべてのケースは32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当する処理が決まるということがあり得ます。
236
236
 
237
- これを避けたいので、私がもし業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにして、エラー処理などを加えたり適宜リファクタして、安全かつ最適化されたコードに仕上げていくだろうと思います。
237
+ これを避けたいので、私がもし業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにするだろうと思います。
238
238
 
239
239
  ```javascript
240
240
 
@@ -265,3 +265,7 @@
265
265
  ```
266
266
 
267
267
  ※ [https://jsfiddle.net/jun68ykt/1bLm7eyd/14/](https://jsfiddle.net/jun68ykt/1bLm7eyd/14/) にも上げておきました。
268
+
269
+
270
+
271
+ これに、エラー処理などを加えたり適宜リファクタして、安全かつ最適化されたコードに仕上げていくだろうと思います。

55

テキスト修正

2018/08/19 19:30

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -232,7 +232,7 @@
232
232
 
233
233
    
234
234
 
235
- `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに、caseあるいはifの数に比例した時間がかかります。(つまり、計算量のオーダーが __O(n)__ いうことです。 )つまり、`FFFFF`から`TTTTT`まですべてのケースは32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当処理が特定されるということがあり得ます。
235
+ `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに、caseあるいはifの数に比例した時間がかかります。計算量のオーダーが __O(n)__ である、言ったります。 )つまり、`FFFFF`から`TTTTT`まですべてのケースは32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当する処理が決まるということがあり得ます。
236
236
 
237
237
  これを避けたいので、私がもし業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにして、エラー処理などを加えたり適宜リファクタして、安全かつ最適化されたコードに仕上げていくだろうと思います。
238
238
 

54

テキスト修正

2018/08/19 13:25

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -232,7 +232,9 @@
232
232
 
233
233
    
234
234
 
235
- `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに、caseあるいはifの数に比例した時間がかかります。(計算量のオーダーが O(__n__)言ったりします。 )`FFFFF`から`TTTTT`まですべてのケースは32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当の条件にマッチするということがあり得ます。これを避けたいので、私がもし業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにして、エラー処理などを加えたり適宜リファクタして、安全かつ最適化されたコードに仕上げていくだろうと思います。
235
+ `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに、caseあるいはifの数に比例した時間がかかります。(つまり、計算量のオーダーが __O(n)__ いうことです。 )つまり、`FFFFF`から`TTTTT`まですべてのケースは32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当の処理が特定されるということがあり得ます。
236
+
237
+ これを避けたいので、私がもし業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにして、エラー処理などを加えたり適宜リファクタして、安全かつ最適化されたコードに仕上げていくだろうと思います。
236
238
 
237
239
  ```javascript
238
240
 

53

テキスト修正

2018/08/19 13:24

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -232,7 +232,7 @@
232
232
 
233
233
    
234
234
 
235
- `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに時間がかかります。`FFFFF`から`TTTTT`まですべてのケースは32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当の条件にマッチするということあり得ます。これを避けたいので、私がもし業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにして、エラー処理などを加えたり適宜リファクタして、安全かつ最適化されたコードに仕上げていくだろうと思います。
235
+ `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに、caseあるいはifの数に比例した時間がかかります。(計算量のオーダーが O(__n__) と言ったりします。 )`FFFFF`から`TTTTT`まですべてのケースは32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当の条件にマッチするということあり得ます。これを避けたいので、私がもし業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにして、エラー処理などを加えたり適宜リファクタして、安全かつ最適化されたコードに仕上げていくだろうと思います。
236
236
 
237
237
  ```javascript
238
238
 

52

テキスト修正

2018/08/19 13:03

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -232,9 +232,7 @@
232
232
 
233
233
    
234
234
 
235
- `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに時間がかかります。`FFFFF`から`TTTTT`まですべてのケースは32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当の条件にマッチします。
236
-
237
- これを避けて、私がもし業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにして、エラー処理などを加えたり適宜リファクタして、安全かつ最適化されたコードに仕上げていくだろうと思います。
235
+ `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに時間がかかります。`FFFFF`から`TTTTT`まですべてのケースは32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当の条件にマッチするということもあり得ます。これを避けたいので、私がも業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにして、エラー処理などを加えたり適宜リファクタして、安全かつ最適化されたコードに仕上げていくだろうと思います。
238
236
 
239
237
  ```javascript
240
238
 

51

テキスト修正

2018/08/19 11:50

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -232,9 +232,9 @@
232
232
 
233
233
    
234
234
 
235
- `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに時間がかかります。最悪の場合は32回の比較をへて、ようやく該当のcaseなりifにマッチします。
235
+ `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに時間がかかります。`FFFFF`から`TTTTT`まですべてのケースは32個あり、これらのそれぞれに case または if があるとすると、最悪の場合は32回の比較をへて、ようやく該当の条件にマッチします。
236
-
236
+
237
- これを避けて、自分がもし業務上で同じことをやる場面に遭遇したら、多分以下のコードをベースにエラー処理などを加え適宜リファクタして、安全かつ最適化されたコードに仕上げていくだろうと思います。
237
+ これを避けて、がもし業務上で同じことをやる場面に遭遇したら、おそらく以下のコードをベースにして、エラー処理などを加えたり適宜リファクタして、安全かつ最適化されたコードに仕上げていくだろうと思います。
238
238
 
239
239
  ```javascript
240
240
 

50

テキスト修正

2018/08/19 11:24

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -223,3 +223,45 @@
223
223
 
224
224
 
225
225
  ご参考まで。
226
+
227
+
228
+
229
+ ---
230
+
231
+ 何度もお節介すみません。
232
+
233
+   
234
+
235
+ `switch 〜 case`を使うにせよ、`if 〜 else if`を使うにせよ、該当する処理にたどりつくのに時間がかかります。最悪の場合は32回の比較をへて、ようやく該当のcaseなりifにマッチします。
236
+
237
+ これを避けて、自分がもし業務上で同じことをやる場面に遭遇したら、多分以下のコードをベースにエラー処理などを加え、適宜リファクタして、安全かつ最適化されたコードに仕上げていくだろうと思います。
238
+
239
+ ```javascript
240
+
241
+ const operations = {
242
+
243
+ FFFFF() { console.log('[F,F,F,F,F]の処理'); },
244
+
245
+ FFFFT() { console.log('[F,F,F,F,T]の処理'); },
246
+
247
+ /* ・・・ */
248
+
249
+ TFTFT() { console.log('[T,F,T,F,T]の処理'); },
250
+
251
+ /* ・・・ */
252
+
253
+ TTTTT() { console.log('[T,T,T,T,T]の処理'); },
254
+
255
+ };
256
+
257
+
258
+
259
+ const sampleAry = ["T","F","T","F","T"];
260
+
261
+
262
+
263
+ operations[sampleAry.join('')]();  // => "[T,F,T,F,T]の処理" と出力される。
264
+
265
+ ```
266
+
267
+ ※ [https://jsfiddle.net/jun68ykt/1bLm7eyd/14/](https://jsfiddle.net/jun68ykt/1bLm7eyd/14/) にも上げておきました。

49

テキスト修正

2018/08/19 09:49

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -204,13 +204,13 @@
204
204
 
205
205
 
206
206
 
207
- 質問者さから
207
+ 質問者のMikiSFから
208
208
 
209
209
  > switchにこだわる理由があるわけではないので、他の方法も調べてみます!
210
210
 
211
211
 
212
212
 
213
- とのコメントを頂きましたので、これに対する回答として以下を補足します。
213
+ とのコメントを頂きましたので、以下を補足します。
214
214
 
215
215
 
216
216
 

48

テキスト修正

2018/08/19 09:15

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -204,15 +204,17 @@
204
204
 
205
205
 
206
206
 
207
+ 質問者さまから
208
+
207
- switchにこだわない。if 〜 else if 〜 でも
209
+ > switchにこだわる理由があるわけではない、他の方法調べてみます!
208
-
209
-
210
-
210
+
211
+
212
+
211
- だし2つ配列が同じ内容ある判定関数を自作せずでによく使われいるライブラリで出来るのであれば、それ使いたい
213
+ とのコメントを頂きましたので、これる回答とし以下補足します
212
-
213
-
214
-
214
+
215
+
216
+
215
- という場合、[Lodash](https://lodash.com/) を使う手もあります。このライブラリの [_.isEqual(value, other)](https://lodash.com/docs/4.17.10#isEqual)を使ったコードを以下に上げておきました。
217
+ 2つの配列が同じ内容である判定関数を自作せずに配列などの操作でよく使われるライブラリ [Lodash](https://lodash.com/) を利用する手もあります。この [_.isEqual(value, other)](https://lodash.com/docs/4.17.10#isEqual)を使ったコードを以下に上げておきました。
216
218
 
217
219
 
218
220
 

47

テキスト修正

2018/08/19 09:14

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -208,7 +208,7 @@
208
208
 
209
209
 
210
210
 
211
- ・ただし2つの配列が同じ内容である判定関数を自作するのは車輪の再開発っぽいので避けて、すでによく使われているライブラリあればそれを使いたい。
211
+ ・ただし2つの配列が同じ内容である判定関数を自作せずに、すでによく使われているライブラリで出来るのであればそれを使いたい。
212
212
 
213
213
 
214
214
 

46

テキスト修正

2018/08/19 09:09

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -46,14 +46,18 @@
46
46
 
47
47
  $ node
48
48
 
49
+ > var a = ["T","F","T","F","T"]
50
+
51
+ undefined
52
+
53
+ > var b = ["T","F","T","F","T"]
54
+
55
+ undefined
56
+
49
- > [1,2,3] === [1,2,3]
57
+ > a === b
50
58
 
51
59
  false
52
60
 
53
- > [] === []
54
-
55
- false
56
-
57
61
  >
58
62
 
59
63
  ```

45

テキスト修正

2018/08/19 08:59

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -208,7 +208,7 @@
208
208
 
209
209
 
210
210
 
211
- という場合、[Lodash](https://lodash.com/) という便利なライブラリを使う手もあります。このライブラリの中の [_.isEqual(value, other)](https://lodash.com/docs/4.17.10#isEqual)を使ったコードを以下に上げておきました。
211
+ という場合、[Lodash](https://lodash.com/) を使う手もあります。このライブラリの [_.isEqual(value, other)](https://lodash.com/docs/4.17.10#isEqual)を使ったコードを以下に上げておきました。
212
212
 
213
213
 
214
214
 

44

テキスト修正

2018/08/19 08:06

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -204,7 +204,7 @@
204
204
 
205
205
 
206
206
 
207
- ・ただし2つの配列が同じ内容である判定関数を自作するのは車輪の再開発っぽいので避けたい。
207
+ ・ただし2つの配列が同じ内容である判定関数を自作するのは車輪の再開発っぽいので避けて、すでによく使われているライブラリがあればそれを使いたい。
208
208
 
209
209
 
210
210
 

43

テキスト修正

2018/08/19 08:02

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -191,3 +191,29 @@
191
191
  ```
192
192
 
193
193
  上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。(同じコードを、[https://jsfiddle.net/jun68ykt/kose0cqu/19/](https://jsfiddle.net/jun68ykt/kose0cqu/19/) にも上げておきました。)
194
+
195
+
196
+
197
+ ---
198
+
199
+ 以下、蛇足です。
200
+
201
+
202
+
203
+ ・switchにはこだわらない。if 〜 else if 〜 でも可
204
+
205
+
206
+
207
+ ・ただし2つの配列が同じ内容である判定関数を自作するのは車輪の再開発っぽいので避けたい。
208
+
209
+
210
+
211
+ という場合、[Lodash](https://lodash.com/) という便利なライブラリを使う手もあります。このライブラリの中の [_.isEqual(value, other)](https://lodash.com/docs/4.17.10#isEqual)を使ったコードを以下に上げておきました。
212
+
213
+
214
+
215
+ [https://jsfiddle.net/jun68ykt/jqp63Lum/6/](https://jsfiddle.net/jun68ykt/jqp63Lum/6/)
216
+
217
+
218
+
219
+ ご参考まで。

42

テキスト修正

2018/08/19 07:57

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
-  (1) javascript の switch文で、 **switch(__x__ )** で与える **__x__** と各 **case __y__ :** の **__y__** とは同値演算子 `===`で比較されること
13
+  (1) javascript の switch文で、 **switch(__x__ )** で与える **__x__** と各 **case __y__ :** の **__y__** とは同値演算子 `===`で比較されること。(つまり __x__ === __y__ が true になる case __y__ : が選ばれる。)
14
14
 
15
15
    
16
16
 

41

テキスト修正

2018/08/19 07:35

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -70,7 +70,7 @@
70
70
 
71
71
  からも分かるように、様々な案が出てくるテーマでもあります。
72
72
 
73
- ですが、上記のstackoverflowの質問への回答で、一番得票数が多い `Array.prototype.equals`を自作するという案だと、MikiSFさんのご質問にある`switch 〜 case` を使うことができません。
73
+ ですが、上記のstackoverflowの質問への回答で、一番得票数が多い [Array.prototype.equalsを自作するという案](https://stackoverflow.com/a/14853974)だと、MikiSFさんのご質問にある`switch 〜 case` を使うことができません。
74
74
 
75
75
   
76
76
 

40

テキスト修正

2018/08/19 07:32

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -124,7 +124,7 @@
124
124
 
125
125
 
126
126
 
127
- 配列要素の "T" を"1"、"F"を"0"と置き換え、要素を結合した文字列を作ると、例えば["T","F","T","F","T"] は "10101" となり、さらに"10101" を2進数と考えれば、 10進数と 21 です。このように "T"か "F" を持つ配列を対応する10進数に変換した値で switch させる手もあるかと思いました。
127
+ 配列要素の "T" を"1"、"F"を"0"と置き換え、要素を結合した文字列を作ると、例えば["T","F","T","F","T"] は "10101" となり、さらに"10101" を2進数と考えれば、 10進数としては 21 です。このように "T"か "F" を持つ配列を対応する10進数に変換した値で switch させる手もあるかと思いました。
128
128
 
129
129
   
130
130
 

39

テキスト修正

2018/08/19 07:15

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -74,7 +74,7 @@
74
74
 
75
75
   
76
76
 
77
- MikiSFさんのご質問の解法として、あくまで`switch 〜 case`を使うことにするならば、対象とする配列の要素が `"T"`か`"F"`で長さが5と決まっているので、要素を結合した `"FFTTT"`という文字列に変換して比較するのが分かり易い方法かなと思います。この方法いくと以下のように `switch 〜 case` を使えます。
77
+ MikiSFさんのご質問の解法として、あくまで`switch 〜 case`を使うことにするならば、対象とする配列の要素を結合した文字列をswitchの対象にするのが分かり易い方法かなと思います。つまり、`["F","F","T","T","T"]` あれば`"FFTTT"` switchの対象とします。以下はコード例です。
78
78
 
79
79
 
80
80
 

38

テキスト修正

2018/08/19 04:35

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -70,9 +70,7 @@
70
70
 
71
71
  からも分かるように、様々な案が出てくるテーマでもあります。
72
72
 
73
-
74
-
75
- 上記のstackoverflowの質問への回答で、一番得票数が多いのは、`Array.prototype.equals`を自作するという案ですが、これだと、MikiSFさんのご質問にある`switch 〜 case` を使うことができません。
73
+ ですが、上記のstackoverflowの質問への回答で、一番得票数が多い `Array.prototype.equals`を自作するという案だと、MikiSFさんのご質問にある`switch 〜 case` を使うことができません。
76
74
 
77
75
   
78
76
 

37

テキスト修正

2018/08/19 04:28

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- とおっしゃっている、理解が曖昧な "基本的な何か" とは以下の2点かと思われます。
9
+ とおっしゃっている、"基本的な何か" とは以下の2点かと思われます。
10
10
 
11
11
 
12
12
 
@@ -34,7 +34,7 @@
34
34
 
35
35
 
36
36
 
37
- (2) については、以下のように確かめられます。
37
+ (2) については、以下のようにして確かめられます。
38
38
 
39
39
 
40
40
 
@@ -68,7 +68,7 @@
68
68
 
69
69
 
70
70
 
71
- からも分かるように、様々な案が出てくるテーマであります。
71
+ からも分かるように、様々な案が出てくるテーマであります。
72
72
 
73
73
 
74
74
 
@@ -76,19 +76,17 @@
76
76
 
77
77
   
78
78
 
79
- MikiSFさんのご質問の解法として、あくまで`switch 〜 case`を使うことにするならば、対象配列が `["F","F","T","T","T"]` という、要素が `"T"`か`"F"`で長さが5と決まっているので、要素を結合した `"FFTTT"`という列に変換して比較するのが分かり易い方法かなと思います。この方法でいくと、以下のように`switch 〜 case` を使えます。
80
-
81
-
79
+ MikiSFさんのご質問の解法として、あくまで`switch 〜 case`を使うことにするならば、対象とする配列要素が `"T"`か`"F"`で長さが5と決まっているので、要素を結合した `"FFTTT"`という文字列に変換して比較するのが分かり易い方法かなと思います。この方法でいくと、以下のように `switch 〜 case` を使えます。
82
80
 
83
81
 
84
82
 
85
83
  ```javascript
86
84
 
87
- const ary = ["F","F","T","T","T"];
85
+ const sampleAry = ["F","F","T","T","T"];
88
86
 
89
87
 
90
88
 
91
- switch (ary.join('')) {
89
+ switch (sampleAry.join('')) {
92
90
 
93
91
  case 'FFTTT':
94
92
 

36

テキスト修正

2018/08/19 04:26

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -60,11 +60,15 @@
60
60
 
61
61
   
62
62
 
63
- 2つの配列`a` と `b`が、同じ要素を同じ順番で過不足なく持っている、すなわち「`a`**と**`b` **は**`内容が同じ配列`**である**」という判定を、どのようなコードで書けばよいか? という問題は、以下のように様々な案が出てくるテーマであります。
63
+ 2つの配列`a` と `b`が、同じ要素を同じ順番で過不足なく持っている、すなわち「`a`**と**`b` **は**`内容が同じ配列`**である**」という判定を、どのようなコードで書けばよいか? という問題は、以下の投稿
64
64
 
65
65
 
66
66
 
67
67
  - stackoverflow: [How to compare arrays in JavaScript?](https://stackoverflow.com/questions/7837456/how-to-compare-arrays-in-javascript)
68
+
69
+
70
+
71
+ からも分かるように、様々な案が出てくるテーマであります。
68
72
 
69
73
 
70
74
 

35

テキスト修正

2018/08/19 03:11

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- とおっしゃっている、理解が曖昧な "基本的な何か" とは以下の2点であろうかと思ます。
9
+ とおっしゃっている、理解が曖昧な "基本的な何か" とは以下の2点かと思われます。
10
10
 
11
11
 
12
12
 

34

テキスト修正

2018/08/19 03:09

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -68,11 +68,11 @@
68
68
 
69
69
 
70
70
 
71
- 上記のstackoverflowの質問への回答で、一番得票数が多いのは、`Array.prototype.equals`を自作するという案ですが、これだと、MikiSFさんのご質問にある`switch 〜 case` では使えません
71
+ 上記のstackoverflowの質問への回答で、一番得票数が多いのは、`Array.prototype.equals`を自作するという案ですが、これだと、MikiSFさんのご質問にある`switch 〜 case` を使うことがません。
72
72
 
73
73
   
74
74
 
75
- MikiSFさんのご質問で、配列が `["F","F","T","T","T"]` という、要素が `"T"`か`"F"`で長さが5の配列なので、要素を結合した、 `"FFTTT"`という配列に変換して比較するのが分かり易い方法かなと思います。この方法でいくと、以下のように、`switch 〜 case` を使えます。
75
+ MikiSFさんのご質問の解法として、あくま`switch 〜 case`を使うことにするならば対象の配列が `["F","F","T","T","T"]` という、要素が `"T"`か`"F"`で長さが5と決まっているので、要素を結合した、 `"FFTTT"`という配列に変換して比較するのが分かり易い方法かなと思います。この方法でいくと、以下のように、`switch 〜 case` を使えます。
76
76
 
77
77
 
78
78
 

33

テキスト修正

2018/08/19 02:54

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
File without changes

32

テキスト修正

2018/08/19 02:19

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -128,7 +128,7 @@
128
128
 
129
129
   
130
130
 
131
- 具体的なコードとしては、少しトリッキーかもしれませんが、例えば以下のように、`Array.prototype.valueOf`メソッドをオーバーライドし対応する10進数を返すようにしておくと、配列の変数`sampleAry` があったときに、`+sampleAry` と`+`を変数の前に書くことで10進数に変換されます。
131
+ 具体的なコードとしては、少しトリッキーかもしれませんが、例えば以下のように、`Array.prototype.valueOf`メソッドをオーバーライドし対応する10進数を返すようにしておくと、配列の変数`sampleAry` があったときに、`+`を変数の前に置いて `+sampleAry` とすると`valueOf`が呼ばれて10進数に変換されます。
132
132
 
133
133
 
134
134
 

31

テキスト修正

2018/08/19 02:19

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -128,7 +128,7 @@
128
128
 
129
129
   
130
130
 
131
- 具体的なコードとしては、少しトリッキーかもしれませんが、例えば以下のように、`Array.prototype.valueOf`メソッドをオーバーライドして対応する10進数を返すようにしておくと、配列の変数`sampleAry` があったときに、`+sampleAry` と書くと、これが10進数に変換された値になります。
131
+ 具体的なコードとしては、少しトリッキーかもしれませんが、例えば以下のように、`Array.prototype.valueOf`メソッドをオーバーライドして対応する10進数を返すようにしておくと、配列の変数`sampleAry` があったときに、`+sampleAry` と、`+`を変数の前に書く10進数に変換されます。
132
132
 
133
133
 
134
134
 

30

テキスト修正

2018/08/19 02:14

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -128,7 +128,7 @@
128
128
 
129
129
   
130
130
 
131
- 具体的なコードとしては、少しトリッキーかもしれませんが、例えば以下のように、`Array.prototype.valueOf`メソッドをオーバーライドして対応する10進数を返すようにしておくと、配列の変数`sampleAry` があったときに、`+sampleAry` と書くと、これが10進数に変換た値になります。
131
+ 具体的なコードとしては、少しトリッキーかもしれませんが、例えば以下のように、`Array.prototype.valueOf`メソッドをオーバーライドして対応する10進数を返すようにしておくと、配列の変数`sampleAry` があったときに、`+sampleAry` と書くと、これが10進数に変換された値になります。
132
132
 
133
133
 
134
134
 

29

テキスト修正

2018/08/19 02:04

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -134,7 +134,7 @@
134
134
 
135
135
  ```javascript
136
136
 
137
- Array.prototype.decimalize = function() {
137
+ Array.prototype.valueOf = function() {
138
138
 
139
139
  return parseInt(this.map(e => e === 'T' ? '1':'0').join(''), 2);
140
140
 

28

テキスト修正

2018/08/19 02:02

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -128,7 +128,7 @@
128
128
 
129
129
   
130
130
 
131
- 具体的なコードとしては、例えば以下のように、対応する10進数に変換する関数 decimalize を Array.prototypeに用意しておき、これを switch で使います。
131
+ 具体的なコードとしては、少しトリッキーかもしれませんが、例えば以下のように、`Array.prototype.valueOf`メソッドをオーバーライドして対応する10進数を返すようにしておくと、配列の変数`sampleAry` があったと`+sampleAry` と書くと、これが10進数に変換した値になります。
132
132
 
133
133
 
134
134
 
@@ -146,7 +146,7 @@
146
146
 
147
147
 
148
148
 
149
- switch(sampleAry.decimalize()) {
149
+ switch(+sampleAry) {
150
150
 
151
151
  case 0:
152
152
 
@@ -190,4 +190,4 @@
190
190
 
191
191
  ```
192
192
 
193
- 上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。(同じコードを、[https://jsfiddle.net/jun68ykt/kose0cqu/15/](https://jsfiddle.net/jun68ykt/kose0cqu/15/) にも上げておきました。)
193
+ 上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。(同じコードを、[https://jsfiddle.net/jun68ykt/kose0cqu/19/](https://jsfiddle.net/jun68ykt/kose0cqu/19/) にも上げておきました。)

27

テキスト修正

2018/08/19 01:59

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -60,7 +60,7 @@
60
60
 
61
61
   
62
62
 
63
- 同じ要素を同じ順番で過不足なく持っている2つの配列`a` と `b`について、「`a`**と**`b` **は**`内容が同じ配列`**である**」という判定を、どのようなコードで書けばよいか? という問題は、以下のように様々な案が出てくるテーマであります。
63
+ 2つの配列`a` と `b`が、同じ要素を同じ順番で過不足なく持っている、すなわち「`a`**と**`b` **は**`内容が同じ配列`**である**」という判定を、どのようなコードで書けばよいか? という問題は、以下のように様々な案が出てくるテーマであります。
64
64
 
65
65
 
66
66
 

26

テキスト修正

2018/08/19 01:48

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -58,9 +58,9 @@
58
58
 
59
59
  ```
60
60
 
61
+  
61
62
 
62
-
63
- 上記のような、同じ要素を同じ順番で、過不足なく持っている2つの配列`a` と `b`について、「`a`**と**`b` **は**`内容が同じ配列`**である**」という判定を、どのようなコードで書けばよいか? という問題は、以下のように様々な案が出てくるテーマであります。
63
+ 同じ要素を同じ順番で、過不足なく持っている2つの配列`a` と `b`について、「`a`**と**`b` **は**`内容が同じ配列`**である**」という判定を、どのようなコードで書けばよいか? という問題は、以下のように様々な案が出てくるテーマであります。
64
64
 
65
65
 
66
66
 

25

テキスト修正

2018/08/19 01:41

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
 
40
40
 
41
- ```
41
+ ```shell
42
42
 
43
43
  $ node -v
44
44
 
@@ -46,23 +46,11 @@
46
46
 
47
47
  $ node
48
48
 
49
- > const a = [1, 'hello', true];
49
+ > [1,2,3] === [1,2,3]
50
50
 
51
- undefined
51
+ false
52
52
 
53
- > const b = [1, 'hello', true];
54
-
55
- undefined
56
-
57
- > a
58
-
59
- [ 1, 'hello', true ]
60
-
61
- > b
62
-
63
- [ 1, 'hello', true ]
64
-
65
- > a === b
53
+ > [] === []
66
54
 
67
55
  false
68
56
 

24

テキスト修正

2018/08/19 00:54

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -140,7 +140,7 @@
140
140
 
141
141
   
142
142
 
143
- 具体的なコードとしては、例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimalize を用意しておき、これを switch で使います。
143
+ 具体的なコードとしては、例えば以下のように、対応する10進数に変換する関数 decimalize を Array.prototype用意しておき、これを switch で使います。
144
144
 
145
145
 
146
146
 

23

テキスト修正

2018/08/19 00:41

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -136,7 +136,11 @@
136
136
 
137
137
 
138
138
 
139
- 配列要素の "T" を"1"、"F"を"0"と置き換え、要素を結合した文字列を作ると、例えば["T","F","T","F","T"] は "10101" となり、さらに"10101" を2進数と考えれば、 10進数だと 21 です。このように "T"か "F" を持つ配列を対応する10進数に変換した値で switch させる手もあるかと思います。例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimalize を用意ておき、これを使います
139
+ 配列要素の "T" を"1"、"F"を"0"と置き換え、要素を結合した文字列を作ると、例えば["T","F","T","F","T"] は "10101" となり、さらに"10101" を2進数と考えれば、 10進数だと 21 です。このように "T"か "F" を持つ配列を対応する10進数に変換した値で switch させる手もあるかと思いまし
140
+
141
+  
142
+
143
+ 具体的なコードとしては、例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimalize を用意しておき、これを switch で使います。
140
144
 
141
145
 
142
146
 

22

テキスト修正

2018/08/19 00:38

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -136,7 +136,7 @@
136
136
 
137
137
 
138
138
 
139
- "T" を"1"、"F"を"0"と置き換え結合ると、たとえば ["T","F","T","F","T"] は "10101" となり、さらに"10101" を2進数と考えれば、 10進数だと 21 です。このように "T"か "F" を持つ配列を対応する10進数に変換した値で switch させる手もあるかと思います。例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimalize を用意しておき、これを使います。
139
+ 配列要素の "T" を"1"、"F"を"0"と置き換え、要素を結合した文字列を作ると、えば["T","F","T","F","T"] は "10101" となり、さらに"10101" を2進数と考えれば、 10進数だと 21 です。このように "T"か "F" を持つ配列を対応する10進数に変換した値で switch させる手もあるかと思います。例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimalize を用意しておき、これを使います。
140
140
 
141
141
 
142
142
 

21

テキスト修正

2018/08/19 00:24

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -144,7 +144,7 @@
144
144
 
145
145
  Array.prototype.decimalize = function() {
146
146
 
147
- return this.reduce((v, e, i) => v + (e === 'T') * 2**(this.length-i-1), 0);
147
+ return parseInt(this.map(e => e === 'T' ? '1':'0').join(''), 2);
148
148
 
149
149
  };
150
150
 
@@ -198,4 +198,4 @@
198
198
 
199
199
  ```
200
200
 
201
- 上記の `Array.prototype.decimalize` では、 算術演算の中で、trueが1に、falseが0として扱われること使っています。上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。(同じコードを、[https://jsfiddle.net/jun68ykt/kose0cqu/8/](https://jsfiddle.net/jun68ykt/kose0cqu/8/) にも上げておきました。)
201
+ 上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。(同じコードを、[https://jsfiddle.net/jun68ykt/kose0cqu/15/](https://jsfiddle.net/jun68ykt/kose0cqu/15/) にも上げておきました。)

20

テキスト修正

2018/08/19 00:17

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -136,7 +136,7 @@
136
136
 
137
137
 
138
138
 
139
- "T" を"1"、"F"を"0"と置き換えて結合すると、たとえば ["F","F","T","T","T"] は "00111" となり、さらに"00111" を2進数と考えれば、 10進数だと 7 です。このように "T"か "F" を持つ配列を対応する10進数に変換した値で switch させる手もあるかと思います。例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimalize を用意しておき、これを使います。
139
+ "T" を"1"、"F"を"0"と置き換えて結合すると、たとえば ["T","F","T","F","T"] は "10101" となり、さらに"10101" を2進数と考えれば、 10進数だと 21 です。このように "T"か "F" を持つ配列を対応する10進数に変換した値で switch させる手もあるかと思います。例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimalize を用意しておき、これを使います。
140
140
 
141
141
 
142
142
 

19

テキスト修正

2018/08/19 00:11

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -150,7 +150,7 @@
150
150
 
151
151
 
152
152
 
153
- const sampleAry = ["T","F","T","F","T"]; // => 2進数10101を表すとれば、10進数だと21
153
+ const sampleAry = ["T","F","T","F","T"]; // 2進数10101を表すもの考えれば、10進数だと21
154
154
 
155
155
 
156
156
 
@@ -198,4 +198,4 @@
198
198
 
199
199
  ```
200
200
 
201
- 上記の `Array.prototype.decimalize` では、 算術演算の中で、trueが1に、falseが0として扱われることを使っています。上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。(同じコードを、[https://jsfiddle.net/jun68ykt/kose0cqu/6/](https://jsfiddle.net/jun68ykt/kose0cqu/6/) にも上げておきました。)
201
+ 上記の `Array.prototype.decimalize` では、 算術演算の中で、trueが1に、falseが0として扱われることを使っています。上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。(同じコードを、[https://jsfiddle.net/jun68ykt/kose0cqu/8/](https://jsfiddle.net/jun68ykt/kose0cqu/8/) にも上げておきました。)

18

テキスト修正

2018/08/19 00:04

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -136,13 +136,13 @@
136
136
 
137
137
 
138
138
 
139
- "T" を"1"、"F"を"0"と置き換えて結合すると、たとえば ["F","F","T","T","T"] は "00111" となり、さらに"00111" を2進数と考えれば、 10進数だと 7 です。このように "T"か "F" を持つ配列を対応する10進数に変換した値で switch させる手もあるかと思います。例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimal を用意しておき、これを使います。
139
+ "T" を"1"、"F"を"0"と置き換えて結合すると、たとえば ["F","F","T","T","T"] は "00111" となり、さらに"00111" を2進数と考えれば、 10進数だと 7 です。このように "T"か "F" を持つ配列を対応する10進数に変換した値で switch させる手もあるかと思います。例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimalize を用意しておき、これを使います。
140
140
 
141
141
 
142
142
 
143
143
  ```javascript
144
144
 
145
- Array.prototype.decimal = function() {
145
+ Array.prototype.decimalize = function() {
146
146
 
147
147
  return this.reduce((v, e, i) => v + (e === 'T') * 2**(this.length-i-1), 0);
148
148
 
@@ -154,7 +154,7 @@
154
154
 
155
155
 
156
156
 
157
- switch(sampleAry.decimal()) {
157
+ switch(sampleAry.decimalize()) {
158
158
 
159
159
  case 0:
160
160
 
@@ -198,4 +198,4 @@
198
198
 
199
199
  ```
200
200
 
201
- 上記の `Array.prototype.decimal` では、 算術演算の中で、trueが1に、falseが0として扱われることを使っています。上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。(同じコードを、[https://jsfiddle.net/jun68ykt/kose0cqu/3/](https://jsfiddle.net/jun68ykt/kose0cqu/3/) にも上げておきました。)
201
+ 上記の `Array.prototype.decimalize` では、 算術演算の中で、trueが1に、falseが0として扱われることを使っています。上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。(同じコードを、[https://jsfiddle.net/jun68ykt/kose0cqu/6/](https://jsfiddle.net/jun68ykt/kose0cqu/6/) にも上げておきました。)

17

テキスト修正

2018/08/18 23:45

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -144,7 +144,7 @@
144
144
 
145
145
  Array.prototype.decimal = function() {
146
146
 
147
- return this.reduce((v, e, i, ary) => v + (e === 'T') * 2**(ary.length-i-1), 0);
147
+ return this.reduce((v, e, i) => v + (e === 'T') * 2**(this.length-i-1), 0);
148
148
 
149
149
  };
150
150
 
@@ -198,4 +198,4 @@
198
198
 
199
199
  ```
200
200
 
201
- 上記の `Array.prototype.decimal` では、 算術演算の中で、trueが1に、falseが0として扱われることを使っています。上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。(同じコードを、[https://jsfiddle.net/jun68ykt/kose0cqu/2/](https://jsfiddle.net/jun68ykt/kose0cqu/2/) にも上げておきました。)
201
+ 上記の `Array.prototype.decimal` では、 算術演算の中で、trueが1に、falseが0として扱われることを使っています。上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。(同じコードを、[https://jsfiddle.net/jun68ykt/kose0cqu/3/](https://jsfiddle.net/jun68ykt/kose0cqu/3/) にも上げておきました。)

16

テキスト修正

2018/08/18 23:40

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -136,7 +136,7 @@
136
136
 
137
137
 
138
138
 
139
- "T" を"1"、"F"を"0"と置き換えて結合すると、たとえば ["F","F","T","T","T"] は "00111" と読むことができ、さらに"00111" を2進数と考えれば、 10進数だと 7 です。このように "T"か "F" を持つ配列を10進数に変換した値で switch させる手もあるかと思います。例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimal を用意しておき、これを使います。
139
+ "T" を"1"、"F"を"0"と置き換えて結合すると、たとえば ["F","F","T","T","T"] は "00111" となり、さらに"00111" を2進数と考えれば、 10進数だと 7 です。このように "T"か "F" を持つ配列を対応する10進数に変換した値で switch させる手もあるかと思います。例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimal を用意しておき、これを使います。
140
140
 
141
141
 
142
142
 

15

テキスト修正

2018/08/18 23:30

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -198,8 +198,4 @@
198
198
 
199
199
  ```
200
200
 
201
- 上記の `Array.prototype.decimal` では、 算術演算の中で、trueが1に、falseが0として扱われることを使っています。
202
-
203
-
204
-
205
- 上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。
201
+ 上記の `Array.prototype.decimal` では、 算術演算の中で、trueが1に、falseが0として扱われることを使っています。上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。(同じコードを、[https://jsfiddle.net/jun68ykt/kose0cqu/2/](https://jsfiddle.net/jun68ykt/kose0cqu/2/) にも上げておきました。)

14

テキスト修正

2018/08/18 23:29

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -144,7 +144,7 @@
144
144
 
145
145
  Array.prototype.decimal = function() {
146
146
 
147
- return this.reduce((v, e, i, ary) => v + (e === 'T' ? 1:0) * 2**(ary.length-i-1), 0);
147
+ return this.reduce((v, e, i, ary) => v + (e === 'T') * 2**(ary.length-i-1), 0);
148
148
 
149
149
  };
150
150
 
@@ -198,6 +198,8 @@
198
198
 
199
199
  ```
200
200
 
201
+ 上記の `Array.prototype.decimal` では、 算術演算の中で、trueが1に、falseが0として扱われることを使っています。
202
+
201
203
 
202
204
 
203
205
  上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。

13

テキスト修正

2018/08/18 23:24

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -136,7 +136,7 @@
136
136
 
137
137
 
138
138
 
139
- "T" を"1"、"F"を"0"と置き換えて結合すると、["F","F","T","T","T"] は "00111" と読むことができ、さらに"00111" を2進数と考えれば、 10進数だと 7 です。このように "T"か "F" を持つ配列を10進数に変換した値で switch させる手もあるかと思います。例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimal を用意しておき、これを使います。
139
+ "T" を"1"、"F"を"0"と置き換えて結合すると、たとえば ["F","F","T","T","T"] は "00111" と読むことができ、さらに"00111" を2進数と考えれば、 10進数だと 7 です。このように "T"か "F" を持つ配列を10進数に変換した値で switch させる手もあるかと思います。例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimal を用意しておき、これを使います。
140
140
 
141
141
 
142
142
 

12

テキスト修正

2018/08/18 23:21

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -127,3 +127,77 @@
127
127
 
128
128
 
129
129
  以上参考になれば幸いです。
130
+
131
+
132
+
133
+ ---
134
+
135
+ **追記**
136
+
137
+
138
+
139
+ "T" を"1"、"F"を"0"と置き換えて結合すると、["F","F","T","T","T"] は "00111" と読むことができ、さらに"00111" を2進数と考えれば、 10進数だと 7 です。このように "T"か "F" を持つ配列を10進数に変換した値で switch させる手もあるかと思います。例えば以下のように、対応する10進数に変換する関数 Array.prototype.decimal を用意しておき、これを使います。
140
+
141
+
142
+
143
+ ```javascript
144
+
145
+ Array.prototype.decimal = function() {
146
+
147
+ return this.reduce((v, e, i, ary) => v + (e === 'T' ? 1:0) * 2**(ary.length-i-1), 0);
148
+
149
+ };
150
+
151
+
152
+
153
+ const sampleAry = ["T","F","T","F","T"]; // => 2進数で10101を表すとすれば、10進数だと21
154
+
155
+
156
+
157
+ switch(sampleAry.decimal()) {
158
+
159
+ case 0:
160
+
161
+ console.log('["F","F","F","F","F"] の場合の処理');
162
+
163
+ break;
164
+
165
+ case 1:
166
+
167
+ console.log('["F","F","F","F","T"] の場合の処理');
168
+
169
+ break;
170
+
171
+ case 2:
172
+
173
+ console.log('["F","F","F","T","F"] の場合の処理');
174
+
175
+ break;
176
+
177
+ // ・・・
178
+
179
+ case 21:
180
+
181
+ console.log('["T","F","T","F","T"] の場合の処理');
182
+
183
+ break;
184
+
185
+ // ・・・
186
+
187
+ case 31:
188
+
189
+ console.log('["T","T","T","T","T"] の場合の処理');
190
+
191
+ break;
192
+
193
+ default:
194
+
195
+ break;
196
+
197
+ }
198
+
199
+ ```
200
+
201
+
202
+
203
+ 上記を実行すると、`case 21:` に該当して、`["T","F","T","F","T"] の場合の処理` と表示されます。

11

テキスト修正

2018/08/18 23:20

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- とおっしゃっている、理解が曖昧な "基本的な何か" とは、おそらく以下の2点であろうかと思います。
9
+ とおっしゃっている、理解が曖昧な "基本的な何か" とは以下の2点であろうかと思います。
10
10
 
11
11
 
12
12
 
@@ -14,7 +14,7 @@
14
14
 
15
15
    
16
16
 
17
-  (2) 二つのArrayオブジェクト `a` と `b` があり、両が同じ要素を同じ順番で含んでいても、`a` と `b` が別個のオブジェクトであれば、 `a === b` は **false** になること
17
+  (2) 二つのArrayオブジェクト `a` と `b` があり、両過不足なく同じ要素を同じ順番で含んでいても、`a` と `b` が別個のオブジェクトであれば、 `a === b` は **false** になること
18
18
 
19
19
 
20
20
 

10

テキスト修正

2018/08/18 15:57

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -24,11 +24,11 @@
24
24
 
25
25
 
26
26
 
27
- ECMAScript® Language Specification: [12.11 The switch Statement](http://www.ecma-international.org/ecma-262/5.1/#sec-12.11)
27
+ [ECMAScript® Language Specification: 12.11 The switch Statement](http://www.ecma-international.org/ecma-262/5.1/#sec-12.11)
28
28
 
29
29
 
30
30
 
31
- > If input is equal to clauseSelector as defined **by the === operator**, then
31
+ > If input is equal to clauseSelector as defined **by the === operator**, then
32
32
 
33
33
 
34
34
 

9

テキスト修正

2018/08/18 15:26

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
   
86
86
 
87
- MikiSFさんのご質問では、配列が `["F","F","T","T","T"]` という、要素が `"T"`か`"F"`で長さが5の配列なので、要素を結合した、 `"FFTTT"`という配列に変換して比較するのが簡単かなと思います。この方法でいくと、以下のように、`switch 〜 case` を使えます。
87
+ MikiSFさんのご質問では、配列が `["F","F","T","T","T"]` という、要素が `"T"`か`"F"`で長さが5の配列なので、要素を結合した、 `"FFTTT"`という配列に変換して比較するのがり易い方法かなと思います。この方法でいくと、以下のように、`switch 〜 case` を使えます。
88
88
 
89
89
 
90
90
 

8

テキスト修正

2018/08/18 15:22

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -84,7 +84,7 @@
84
84
 
85
85
   
86
86
 
87
- MikiSFさんのご質問では、配列が `["F","F","T","T","T"]` という、要素が `"T"`か`"F"`で長さが5の配列なので、要素を結合した、 `"FFTTT"`という配列に変換して比較するのが簡単かなと思います。この方法でいくと、以下のようになります。
87
+ MikiSFさんのご質問では、配列が `["F","F","T","T","T"]` という、要素が `"T"`か`"F"`で長さが5の配列なので、要素を結合した、 `"FFTTT"`という配列に変換して比較するのが簡単かなと思います。この方法でいくと、以下のように、`switch 〜 case` を使えます。
88
88
 
89
89
 
90
90
 

7

テキスト修正

2018/08/18 15:13

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -92,11 +92,11 @@
92
92
 
93
93
  ```javascript
94
94
 
95
- const a = ["F","F","T","T","T"];
95
+ const ary = ["F","F","T","T","T"];
96
96
 
97
97
 
98
98
 
99
- switch (a.join('')) {
99
+ switch (ary.join('')) {
100
100
 
101
101
  case 'FFTTT':
102
102
 

6

テキスト修正

2018/08/18 15:10

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -72,7 +72,7 @@
72
72
 
73
73
 
74
74
 
75
- 上記のような、同じ要素を同じ順番で、過不足なく持っている2つの配列`a` と `b`について、「`a`**と**`b` **は**`内容が同じ配列`**である**」という判定を、どのようなコードで書けばよいか? という問題は、以下のようにりいろいろな案が出てくるテーマであります。
75
+ 上記のような、同じ要素を同じ順番で、過不足なく持っている2つの配列`a` と `b`について、「`a`**と**`b` **は**`内容が同じ配列`**である**」という判定を、どのようなコードで書けばよいか? という問題は、以下のように様々な案が出てくるテーマであります。
76
76
 
77
77
 
78
78
 

5

テキスト修正

2018/08/18 15:07

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
-  (1) javascript の switch文で、 **switch(__x__)** で与える **__x__** と各 **case __y__:** の **__y__** とは同値演算子 `===`で比較されること
13
+  (1) javascript の switch文で、 **switch(__x__ )** で与える **__x__** と各 **case __y__ :** の **__y__** とは同値演算子 `===`で比較されること
14
14
 
15
15
    
16
16
 

4

テキスト修正

2018/08/18 15:04

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -72,7 +72,7 @@
72
72
 
73
73
 
74
74
 
75
- 上記のような、同じ要素を同じ順番で、過不足なく持っている2つの配列`a` と `b`について、「`a`**と**`b` **が、**`内容が同じ配列`**である**」ということを、どのようなコードで判定すればよいか? という問題は、以下のようにかなりいろいろな案が出てくるテーマであります。
75
+ 上記のような、同じ要素を同じ順番で、過不足なく持っている2つの配列`a` と `b`について、「`a`**と**`b` ****`内容が同じ配列`**である**」という判定を、どのようなコードで書けばよいか? という問題は、以下のようにかなりいろいろな案が出てくるテーマであります。
76
76
 
77
77
 
78
78
 

3

テキスト修正

2018/08/18 14:57

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -72,7 +72,7 @@
72
72
 
73
73
 
74
74
 
75
- 上記のような、同じ要素を同じ順番で、過不足なく持っている2つの配列`a` と `b`について、「この `a`と`b` `内容が同じ配列である`」ということを、どのよう判定すればよいか? という問題は、以下のようにかなりいろいろな案が出てくるテーマであります。
75
+ 上記のような、同じ要素を同じ順番で、過不足なく持っている2つの配列`a` と `b`について、「`a`****`b` **が、**`内容が同じ配列`**である**」ということを、どのようなコードで判定すればよいか? という問題は、以下のようにかなりいろいろな案が出てくるテーマであります。
76
76
 
77
77
 
78
78
 
@@ -82,9 +82,9 @@
82
82
 
83
83
  上記のstackoverflowの質問への回答で、一番得票数が多いのは、`Array.prototype.equals`を自作するという案ですが、これだと、MikiSFさんのご質問にある`switch 〜 case` では使えませんね。
84
84
 
85
+  
85
86
 
86
-
87
- のご質問では、配列が `["F","F","T","T","T"]` という、要素が `"T"`か`"F"`で長さが5の配列なので、要素を結合した、 `"FFTTT"`という配列に変換して比較するのが簡単かなと思います。この方法でいくと、以下のようになります。
87
+ MikiSFさんのご質問では、配列が `["F","F","T","T","T"]` という、要素が `"T"`か`"F"`で長さが5の配列なので、要素を結合した、 `"FFTTT"`という配列に変換して比較するのが簡単かなと思います。この方法でいくと、以下のようになります。
88
88
 
89
89
 
90
90
 

2

テキスト修正

2018/08/18 14:48

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -72,7 +72,7 @@
72
72
 
73
73
 
74
74
 
75
- 上記のような2つの配列`a` と `b`について、同じ要素を同じ順番、過不足なく持ってことの判定をどうすればよいか? という問題は、以下のようにかなりいろいろな案が出てくるテーマであります。
75
+ 上記のような、同じ要素を同じ順番で、過不足なく持っている2つの配列`a` と `b`について、「この `a`と`b` は`内容が同じ配列ある`」とことを、どように判定すればよいか? という問題は、以下のようにかなりいろいろな案が出てくるテーマであります。
76
76
 
77
77
 
78
78
 

1

テキスト修正

2018/08/18 14:44

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -6,7 +6,7 @@
6
6
 
7
7
 
8
8
 
9
- その理解が曖昧な"基本的な何か" とは、おそらく以下の2かと思います。
9
+ とおっしゃっている、理解が曖昧な "基本的な何か" とは、おそらく以下の2点でろうかと思います。
10
10
 
11
11
 
12
12