回答編集履歴

1

おまけ追加

2020/02/07 04:54

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -131,3 +131,99 @@
131
131
  // 重複してないしroom3もroom4も含んでいる配列になった
132
132
 
133
133
  ```
134
+
135
+
136
+
137
+ ---
138
+
139
+
140
+
141
+ 【おまけ】 データ構造変更の提案
142
+
143
+
144
+
145
+ > ```js
146
+
147
+ > [
148
+
149
+ > {"keyno":"A1","room1":"102","room2":"103"},
150
+
151
+ > {"keyno":"B2","room1":"201","room2":"202"},
152
+
153
+ > ];
154
+
155
+ > ```
156
+
157
+
158
+
159
+ 冒頭に存在するコレ、非常に扱いにくいです。
160
+
161
+ room1とかroom2とか誰が決めたんですか?
162
+
163
+ 1番目ルームなのに102号室だったり、201号室だったりして一貫性がありません。
164
+
165
+
166
+
167
+ 普通に考えてこうなっているべきです。
168
+
169
+ A1の鍵で開けられるのは102号室・103号室の2つですよという意味がバシッと通って使いやすくなっています。
170
+
171
+
172
+
173
+ ```js
174
+
175
+ [
176
+
177
+ {keyno:"A1", rooms: ["102", "103"]},
178
+
179
+ {keyno:"B2", rooms: ["201", "202"]},
180
+
181
+ ]
182
+
183
+ .filter(key => key.rooms.includes("102"))
184
+
185
+ .forEach(it => console.log(it));
186
+
187
+ // {keyno: "A1", rooms: ["102", "103"]}
188
+
189
+ ```
190
+
191
+
192
+
193
+ どうしても変更出来ないというのであれば、
194
+
195
+ こういう風にメインロジックに持ち込みやすい形に整形すると良いでしょう。
196
+
197
+
198
+
199
+ ```js
200
+
201
+ const keys = [
202
+
203
+ {"keyno":"A1","room1":"102","room2":"103"},
204
+
205
+ {"keyno":"B2","room1":"201","room2":"202"},
206
+
207
+ ].map(key => ({
208
+
209
+ keyno: key.keyno,
210
+
211
+ rooms: Object.keys(key).filter(it => it !== "keyno").map(it => key[it]),
212
+
213
+ }));
214
+
215
+ console.log(keys);
216
+
217
+ // [{keyno: "A1", rooms: ["102", "103"]}, {keyno: "B2", rooms: ["201", "202"]}]
218
+
219
+
220
+
221
+ keys
222
+
223
+ .filter(key => key.rooms.includes("102"))
224
+
225
+ .forEach(it => console.log(it));
226
+
227
+ // {keyno: "A1", rooms: Array(2)}
228
+
229
+ ```