回答編集履歴

9

a

2021/06/26 12:13

投稿

k49977
k49977

スコア27

test CHANGED
@@ -1,3 +1,127 @@
1
+ 最終形態が以下です。
2
+
3
+ ```js
4
+
5
+ let a =
6
+
7
+ // APIからのレスポンスJSON
8
+
9
+ [
10
+
11
+ {
12
+
13
+ id: 1,
14
+
15
+ name: "甲グループ",
16
+
17
+ custom: [
18
+
19
+ {
20
+
21
+ id: 1,
22
+
23
+ name: "甲-1",
24
+
25
+ type: "B"
26
+
27
+ }
28
+
29
+ ]
30
+
31
+ },
32
+
33
+ {
34
+
35
+ id: 2,
36
+
37
+ name: "乙グループ",
38
+
39
+ custom: [
40
+
41
+ {
42
+
43
+ id: 2,
44
+
45
+ name: "乙-1",
46
+
47
+ type: "A"
48
+
49
+ },
50
+
51
+ {
52
+
53
+ id: 3,
54
+
55
+ name: "乙-2",
56
+
57
+ type: "B"
58
+
59
+ },
60
+
61
+ {
62
+
63
+ id: 4,
64
+
65
+ name: "乙-3",
66
+
67
+ type: "B"
68
+
69
+ }
70
+
71
+ ]
72
+
73
+ },
74
+
75
+ {
76
+
77
+ id: 3,
78
+
79
+ name: "龍グループ",
80
+
81
+ custom: [
82
+
83
+ {
84
+
85
+ id: 5,
86
+
87
+ name: "龍-1",
88
+
89
+ type: "A"
90
+
91
+ }
92
+
93
+ ]
94
+
95
+ }
96
+
97
+ ];
98
+
99
+
100
+
101
+ const target = "B";
102
+
103
+ const result = a
104
+
105
+ .flatMap((x) => x.custom.filter((c) => c.type === target))
106
+
107
+ .map((y) => y.id);
108
+
109
+
110
+
111
+ console.log(JSON.stringify(result));
112
+
113
+ // [1,3,4]
114
+
115
+
116
+
117
+ ```
118
+
119
+
120
+
121
+ ### 最終形態までの経緯(上から下へ新しくなっていきます)
122
+
123
+
124
+
1
125
  一応以下でいけました。(もっといい方法ないかな。。y[0]あたりが怪しい)
2
126
 
3
127
  [https://codesandbox.io/s/icy-cdn-jfbb3?file=/src/index.js

8

a

2021/06/26 12:13

投稿

k49977
k49977

スコア27

test CHANGED
@@ -466,7 +466,7 @@
466
466
 
467
467
  ### 追記4
468
468
 
469
- リファクタリング。flatMapを使えば1行減りました
469
+ リファクタリング。flatMapを使えば1行減りました.filterも上でやっているのでnull排除できていそうなのでいらなそう。
470
470
 
471
471
  ```js
472
472
 
@@ -474,7 +474,7 @@
474
474
 
475
475
  .flatMap((x) => x.custom.filter((c) => c.type === target))
476
476
 
477
- .filter((y) => y)
477
+ // .filter((y) => y)
478
478
 
479
479
  // .flat()
480
480
 

7

a

2021/06/26 10:40

投稿

k49977
k49977

スコア27

test CHANGED
@@ -461,3 +461,23 @@
461
461
 
462
462
 
463
463
  ```
464
+
465
+
466
+
467
+ ### 追記4
468
+
469
+ リファクタリング。flatMapを使えば1行減りました
470
+
471
+ ```js
472
+
473
+ const result = a
474
+
475
+ .flatMap((x) => x.custom.filter((c) => c.type === target))
476
+
477
+ .filter((y) => y)
478
+
479
+ // .flat()
480
+
481
+ .map((y) => y.id);
482
+
483
+ ```

6

a

2021/06/26 10:29

投稿

k49977
k49977

スコア27

test CHANGED
@@ -333,3 +333,131 @@
333
333
 
334
334
 
335
335
  ```
336
+
337
+
338
+
339
+ ### 追記3
340
+
341
+ flat()を挟むことで配列の深さを修正することができました
342
+
343
+ ```js
344
+
345
+ let a =
346
+
347
+ // APIからのレスポンスJSON
348
+
349
+ [
350
+
351
+ {
352
+
353
+ id: 1,
354
+
355
+ name: "甲グループ",
356
+
357
+ custom: [
358
+
359
+ {
360
+
361
+ id: 1,
362
+
363
+ name: "甲-1",
364
+
365
+ type: "B"
366
+
367
+ }
368
+
369
+ ]
370
+
371
+ },
372
+
373
+ {
374
+
375
+ id: 2,
376
+
377
+ name: "乙グループ",
378
+
379
+ custom: [
380
+
381
+ {
382
+
383
+ id: 2,
384
+
385
+ name: "乙-1",
386
+
387
+ type: "A"
388
+
389
+ },
390
+
391
+ {
392
+
393
+ id: 3,
394
+
395
+ name: "乙-2",
396
+
397
+ type: "B"
398
+
399
+ },
400
+
401
+ {
402
+
403
+ id: 4,
404
+
405
+ name: "乙-3",
406
+
407
+ type: "B"
408
+
409
+ }
410
+
411
+ ]
412
+
413
+ },
414
+
415
+ {
416
+
417
+ id: 3,
418
+
419
+ name: "龍グループ",
420
+
421
+ custom: [
422
+
423
+ {
424
+
425
+ id: 5,
426
+
427
+ name: "龍-1",
428
+
429
+ type: "A"
430
+
431
+ }
432
+
433
+ ]
434
+
435
+ }
436
+
437
+ ];
438
+
439
+
440
+
441
+ const target = "B";
442
+
443
+ // console.log(JSON.stringify(a));
444
+
445
+
446
+
447
+ const result = a
448
+
449
+ .map((x) => x.custom.filter((c) => c.type === target))
450
+
451
+ .filter((y) => y)
452
+
453
+ .flat()
454
+
455
+ .map((y) => y.id);
456
+
457
+
458
+
459
+ console.log(JSON.stringify(result));
460
+
461
+
462
+
463
+ ```

5

a

2021/06/26 10:25

投稿

k49977
k49977

スコア27

test CHANGED
@@ -210,7 +210,7 @@
210
210
 
211
211
  ### 追記2
212
212
 
213
- 項目が複数のときだめですね。。y[0]としているからかもですが、じゃあどうしよう。。
213
+ 該当項目が1グループに複数のときだめですね。。y[0]としているからかもですが、じゃあどうしよう。。
214
214
 
215
215
  ```js
216
216
 
@@ -328,6 +328,8 @@
328
328
 
329
329
  console.log(JSON.stringify(result));
330
330
 
331
+ // [1,3] ([1,3,4]となるはず)
332
+
331
333
 
332
334
 
333
335
  ```

4

a

2021/06/26 09:15

投稿

k49977
k49977

スコア27

test CHANGED
@@ -205,3 +205,129 @@
205
205
 
206
206
 
207
207
  ```
208
+
209
+
210
+
211
+ ### 追記2
212
+
213
+ 項目が複数のときだめですね。。y[0]としているからかもですが、じゃあどうしよう。。
214
+
215
+ ```js
216
+
217
+ let a =
218
+
219
+ // APIからのレスポンスJSON
220
+
221
+ [
222
+
223
+ {
224
+
225
+ id: 1,
226
+
227
+ name: "甲グループ",
228
+
229
+ custom: [
230
+
231
+ {
232
+
233
+ id: 1,
234
+
235
+ name: "甲-1",
236
+
237
+ type: "B"
238
+
239
+ }
240
+
241
+ ]
242
+
243
+ },
244
+
245
+ {
246
+
247
+ id: 2,
248
+
249
+ name: "乙グループ",
250
+
251
+ custom: [
252
+
253
+ {
254
+
255
+ id: 2,
256
+
257
+ name: "乙-1",
258
+
259
+ type: "A"
260
+
261
+ },
262
+
263
+ {
264
+
265
+ id: 3,
266
+
267
+ name: "乙-2",
268
+
269
+ type: "B"
270
+
271
+ },
272
+
273
+ {
274
+
275
+ id: 4,
276
+
277
+ name: "乙-3",
278
+
279
+ type: "B"
280
+
281
+ }
282
+
283
+ ]
284
+
285
+ },
286
+
287
+ {
288
+
289
+ id: 3,
290
+
291
+ name: "龍グループ",
292
+
293
+ custom: [
294
+
295
+ {
296
+
297
+ id: 5,
298
+
299
+ name: "龍-1",
300
+
301
+ type: "A"
302
+
303
+ }
304
+
305
+ ]
306
+
307
+ }
308
+
309
+ ];
310
+
311
+
312
+
313
+ const target = "B";
314
+
315
+ // console.log(JSON.stringify(a));
316
+
317
+
318
+
319
+ const result = a
320
+
321
+ .map((x) => x.custom.filter((c) => c.type === target))
322
+
323
+ .filter((y) => y[0])
324
+
325
+ .map((y) => y[0].id);
326
+
327
+
328
+
329
+ console.log(JSON.stringify(result));
330
+
331
+
332
+
333
+ ```

3

a

2021/06/26 09:14

投稿

k49977
k49977

スコア27

test CHANGED
@@ -94,11 +94,7 @@
94
94
 
95
95
  ### 追記
96
96
 
97
- やはり以下のような場合に崩壊しました.
98
-
99
- y[0]がnullだとidがとれないです
97
+ y[0]がnullだとidがとれない対応.リファクタリングできそうな気が
100
-
101
-
102
98
 
103
99
  ```js
104
100
 
@@ -198,7 +194,9 @@
198
194
 
199
195
  .map((x) => x.custom.filter((c) => c.type === target))
200
196
 
197
+ .filter((y) => y[0])
198
+
201
- .map((y) => y[0]);
199
+ .map((y) => y[0].id);
202
200
 
203
201
 
204
202
 

2

a

2021/06/26 08:57

投稿

k49977
k49977

スコア27

test CHANGED
@@ -89,3 +89,121 @@
89
89
 
90
90
 
91
91
  ```
92
+
93
+
94
+
95
+ ### 追記
96
+
97
+ やはり以下のような場合に崩壊しました.
98
+
99
+ y[0]がnullだとidがとれないです
100
+
101
+
102
+
103
+ ```js
104
+
105
+ let a =
106
+
107
+ // APIからのレスポンスJSON
108
+
109
+ [
110
+
111
+ {
112
+
113
+ id: 1,
114
+
115
+ name: "甲グループ",
116
+
117
+ custom: [
118
+
119
+ {
120
+
121
+ id: 1,
122
+
123
+ name: "甲-1",
124
+
125
+ type: "B"
126
+
127
+ }
128
+
129
+ ]
130
+
131
+ },
132
+
133
+ {
134
+
135
+ id: 2,
136
+
137
+ name: "乙グループ",
138
+
139
+ custom: [
140
+
141
+ {
142
+
143
+ id: 2,
144
+
145
+ name: "乙-1",
146
+
147
+ type: "A"
148
+
149
+ },
150
+
151
+ {
152
+
153
+ id: 3,
154
+
155
+ name: "乙-2",
156
+
157
+ type: "B"
158
+
159
+ }
160
+
161
+ ]
162
+
163
+ },
164
+
165
+ {
166
+
167
+ id: 3,
168
+
169
+ name: "龍グループ",
170
+
171
+ custom: [
172
+
173
+ {
174
+
175
+ id: 4,
176
+
177
+ name: "龍-1",
178
+
179
+ type: "A"
180
+
181
+ }
182
+
183
+ ]
184
+
185
+ }
186
+
187
+ ];
188
+
189
+
190
+
191
+ const target = "B";
192
+
193
+ // console.log(JSON.stringify(a));
194
+
195
+
196
+
197
+ const result = a
198
+
199
+ .map((x) => x.custom.filter((c) => c.type === target))
200
+
201
+ .map((y) => y[0]);
202
+
203
+
204
+
205
+ console.log(JSON.stringify(result));
206
+
207
+
208
+
209
+ ```

1

a

2021/06/26 08:53

投稿

k49977
k49977

スコア27

test CHANGED
@@ -1,8 +1,8 @@
1
1
  一応以下でいけました。(もっといい方法ないかな。。y[0]あたりが怪しい)
2
2
 
3
- https://codesandbox.io/s/icy-cdn-jfbb3?file=/src/index.js
3
+ [https://codesandbox.io/s/icy-cdn-jfbb3?file=/src/index.js
4
4
 
5
-
5
+ ](https://codesandbox.io/s/icy-cdn-jfbb3?file=/src/index.js)
6
6
 
7
7
  ```js
8
8