teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

mapを使う理由付けを記載

2020/02/10 08:50

投稿

miyabi-sun
miyabi-sun

スコア21472

answer CHANGED
@@ -13,6 +13,13 @@
13
13
  このコードを読んだ人が貴方を「こいつ大嘘吐きのペテン野郎だな」と評価するでしょう。
14
14
  処理するならforEachを使うべきです。
15
15
 
16
+ しかし、重複してるコピペコードをよく見てください。
17
+ 変更箇所は`"102", "201", "202", "303", "401"`の部分だけですよね?
18
+ ならば最も適切なのは`["102", "201", "202", "303", "401"]`というルームナンバーリストという配列からmapでキー情報を取り出す事になります。
19
+
20
+ これでコピペコード郡が一掃されます。
21
+ それではいきましょう。
22
+
16
23
  ```js
17
24
  const keys = [
18
25
  {"keyno":"A1","room1":"102","room2":"103"},
@@ -21,8 +28,8 @@
21
28
  {"keyno":"D4","room1":"401"},
22
29
  ];
23
30
 
24
- // reListみたなもは不要
31
+ // このように欲し鍵情報配列を準備したが
25
- // 欲しい部屋番号から対応したのに変形させれば良い
32
+ // 直接["102", "201", "202", "303", "401"].map(fn)とやっても良い
26
33
  const rooms = ["102", "201", "202", "303", "401"];
27
34
  const result = rooms
28
35
  .map(room =>

1

filter→findの本文追加

2020/02/10 08:50

投稿

miyabi-sun
miyabi-sun

スコア21472

answer CHANGED
@@ -53,7 +53,16 @@
53
53
  ---
54
54
 
55
55
  続いて本当にfilterが妥当なものなのかを考える必要があります。
56
+ before、afterのデータとコードを見る限りfilterである意味が微塵もありません。
56
57
 
58
+ 一つの鍵で複数の部屋を開けられる(マスターキー?)という時点で仰天ですが、
59
+ その割には大した数のドアは開けられませんし、掃除してくれる方に対するセキュリティなのかな?
60
+ まぁいいや、清掃担当用のマスターキーと仮定しましょう。
61
+
62
+ もし一つの部屋が複数のマスターキーで開けられて、
63
+ 全ての鍵を列挙しなければならないのであれば別ですが、
64
+ 一つの部屋が一つのマスターでしか開けられない前提ならばfilterは混乱の元でしかないのでfindにしてしまいましょう。
65
+
57
66
  ```js
58
67
  const keys = [
59
68
  {"keyno":"A1","room1":"102","room2":"103"},