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

回答編集履歴

9

a

2021/06/26 12:13

投稿

k49977
k49977

スコア27

answer CHANGED
@@ -1,3 +1,65 @@
1
+ 最終形態が以下です。
2
+ ```js
3
+ let a =
4
+ // APIからのレスポンスJSON
5
+ [
6
+ {
7
+ id: 1,
8
+ name: "甲グループ",
9
+ custom: [
10
+ {
11
+ id: 1,
12
+ name: "甲-1",
13
+ type: "B"
14
+ }
15
+ ]
16
+ },
17
+ {
18
+ id: 2,
19
+ name: "乙グループ",
20
+ custom: [
21
+ {
22
+ id: 2,
23
+ name: "乙-1",
24
+ type: "A"
25
+ },
26
+ {
27
+ id: 3,
28
+ name: "乙-2",
29
+ type: "B"
30
+ },
31
+ {
32
+ id: 4,
33
+ name: "乙-3",
34
+ type: "B"
35
+ }
36
+ ]
37
+ },
38
+ {
39
+ id: 3,
40
+ name: "龍グループ",
41
+ custom: [
42
+ {
43
+ id: 5,
44
+ name: "龍-1",
45
+ type: "A"
46
+ }
47
+ ]
48
+ }
49
+ ];
50
+
51
+ const target = "B";
52
+ const result = a
53
+ .flatMap((x) => x.custom.filter((c) => c.type === target))
54
+ .map((y) => y.id);
55
+
56
+ console.log(JSON.stringify(result));
57
+ // [1,3,4]
58
+
59
+ ```
60
+
61
+ ### 最終形態までの経緯(上から下へ新しくなっていきます)
62
+
1
63
  一応以下でいけました。(もっといい方法ないかな。。y[0]あたりが怪しい)
2
64
  [https://codesandbox.io/s/icy-cdn-jfbb3?file=/src/index.js
3
65
  ](https://codesandbox.io/s/icy-cdn-jfbb3?file=/src/index.js)

8

a

2021/06/26 12:13

投稿

k49977
k49977

スコア27

answer CHANGED
@@ -232,11 +232,11 @@
232
232
  ```
233
233
 
234
234
  ### 追記4
235
- リファクタリング。flatMapを使えば1行減りました
235
+ リファクタリング。flatMapを使えば1行減りました.filterも上でやっているのでnull排除できていそうなのでいらなそう。
236
236
  ```js
237
237
  const result = a
238
238
  .flatMap((x) => x.custom.filter((c) => c.type === target))
239
- .filter((y) => y)
239
+ // .filter((y) => y)
240
240
  // .flat()
241
241
  .map((y) => y.id);
242
242
  ```

7

a

2021/06/26 10:40

投稿

k49977
k49977

スコア27

answer CHANGED
@@ -229,4 +229,14 @@
229
229
 
230
230
  console.log(JSON.stringify(result));
231
231
 
232
+ ```
233
+
234
+ ### 追記4
235
+ リファクタリング。flatMapを使えば1行減りました
236
+ ```js
237
+ const result = a
238
+ .flatMap((x) => x.custom.filter((c) => c.type === target))
239
+ .filter((y) => y)
240
+ // .flat()
241
+ .map((y) => y.id);
232
242
  ```

6

a

2021/06/26 10:29

投稿

k49977
k49977

スコア27

answer CHANGED
@@ -165,4 +165,68 @@
165
165
  console.log(JSON.stringify(result));
166
166
  // [1,3] ([1,3,4]となるはず)
167
167
 
168
+ ```
169
+
170
+ ### 追記3
171
+ flat()を挟むことで配列の深さを修正することができました
172
+ ```js
173
+ let a =
174
+ // APIからのレスポンスJSON
175
+ [
176
+ {
177
+ id: 1,
178
+ name: "甲グループ",
179
+ custom: [
180
+ {
181
+ id: 1,
182
+ name: "甲-1",
183
+ type: "B"
184
+ }
185
+ ]
186
+ },
187
+ {
188
+ id: 2,
189
+ name: "乙グループ",
190
+ custom: [
191
+ {
192
+ id: 2,
193
+ name: "乙-1",
194
+ type: "A"
195
+ },
196
+ {
197
+ id: 3,
198
+ name: "乙-2",
199
+ type: "B"
200
+ },
201
+ {
202
+ id: 4,
203
+ name: "乙-3",
204
+ type: "B"
205
+ }
206
+ ]
207
+ },
208
+ {
209
+ id: 3,
210
+ name: "龍グループ",
211
+ custom: [
212
+ {
213
+ id: 5,
214
+ name: "龍-1",
215
+ type: "A"
216
+ }
217
+ ]
218
+ }
219
+ ];
220
+
221
+ const target = "B";
222
+ // console.log(JSON.stringify(a));
223
+
224
+ const result = a
225
+ .map((x) => x.custom.filter((c) => c.type === target))
226
+ .filter((y) => y)
227
+ .flat()
228
+ .map((y) => y.id);
229
+
230
+ console.log(JSON.stringify(result));
231
+
168
232
  ```

5

a

2021/06/26 10:25

投稿

k49977
k49977

スコア27

answer CHANGED
@@ -104,7 +104,7 @@
104
104
  ```
105
105
 
106
106
  ### 追記2
107
- 項目が複数のときだめですね。。y[0]としているからかもですが、じゃあどうしよう。。
107
+ 該当項目が1グループに複数のときだめですね。。y[0]としているからかもですが、じゃあどうしよう。。
108
108
  ```js
109
109
  let a =
110
110
  // APIからのレスポンスJSON
@@ -163,5 +163,6 @@
163
163
  .map((y) => y[0].id);
164
164
 
165
165
  console.log(JSON.stringify(result));
166
+ // [1,3] ([1,3,4]となるはず)
166
167
 
167
168
  ```

4

a

2021/06/26 09:15

投稿

k49977
k49977

スコア27

answer CHANGED
@@ -101,4 +101,67 @@
101
101
 
102
102
  console.log(JSON.stringify(result));
103
103
 
104
+ ```
105
+
106
+ ### 追記2
107
+ 項目が複数のときだめですね。。y[0]としているからかもですが、じゃあどうしよう。。
108
+ ```js
109
+ let a =
110
+ // APIからのレスポンスJSON
111
+ [
112
+ {
113
+ id: 1,
114
+ name: "甲グループ",
115
+ custom: [
116
+ {
117
+ id: 1,
118
+ name: "甲-1",
119
+ type: "B"
120
+ }
121
+ ]
122
+ },
123
+ {
124
+ id: 2,
125
+ name: "乙グループ",
126
+ custom: [
127
+ {
128
+ id: 2,
129
+ name: "乙-1",
130
+ type: "A"
131
+ },
132
+ {
133
+ id: 3,
134
+ name: "乙-2",
135
+ type: "B"
136
+ },
137
+ {
138
+ id: 4,
139
+ name: "乙-3",
140
+ type: "B"
141
+ }
142
+ ]
143
+ },
144
+ {
145
+ id: 3,
146
+ name: "龍グループ",
147
+ custom: [
148
+ {
149
+ id: 5,
150
+ name: "龍-1",
151
+ type: "A"
152
+ }
153
+ ]
154
+ }
155
+ ];
156
+
157
+ const target = "B";
158
+ // console.log(JSON.stringify(a));
159
+
160
+ const result = a
161
+ .map((x) => x.custom.filter((c) => c.type === target))
162
+ .filter((y) => y[0])
163
+ .map((y) => y[0].id);
164
+
165
+ console.log(JSON.stringify(result));
166
+
104
167
  ```

3

a

2021/06/26 09:14

投稿

k49977
k49977

スコア27

answer CHANGED
@@ -46,9 +46,7 @@
46
46
  ```
47
47
 
48
48
  ### 追記
49
- やはり以下のような場合に崩壊しました.
50
- y[0]がnullだとidがとれないです
49
+ y[0]がnullだとidがとれない対応.リファクタリングできそうな気が
51
-
52
50
  ```js
53
51
  let a =
54
52
  // APIからのレスポンスJSON
@@ -98,7 +96,8 @@
98
96
 
99
97
  const result = a
100
98
  .map((x) => x.custom.filter((c) => c.type === target))
99
+ .filter((y) => y[0])
101
- .map((y) => y[0]);
100
+ .map((y) => y[0].id);
102
101
 
103
102
  console.log(JSON.stringify(result));
104
103
 

2

a

2021/06/26 08:57

投稿

k49977
k49977

スコア27

answer CHANGED
@@ -43,4 +43,63 @@
43
43
 
44
44
  console.log(JSON.stringify(result));
45
45
 
46
+ ```
47
+
48
+ ### 追記
49
+ やはり以下のような場合に崩壊しました.
50
+ y[0]がnullだとidがとれないです
51
+
52
+ ```js
53
+ let a =
54
+ // APIからのレスポンスJSON
55
+ [
56
+ {
57
+ id: 1,
58
+ name: "甲グループ",
59
+ custom: [
60
+ {
61
+ id: 1,
62
+ name: "甲-1",
63
+ type: "B"
64
+ }
65
+ ]
66
+ },
67
+ {
68
+ id: 2,
69
+ name: "乙グループ",
70
+ custom: [
71
+ {
72
+ id: 2,
73
+ name: "乙-1",
74
+ type: "A"
75
+ },
76
+ {
77
+ id: 3,
78
+ name: "乙-2",
79
+ type: "B"
80
+ }
81
+ ]
82
+ },
83
+ {
84
+ id: 3,
85
+ name: "龍グループ",
86
+ custom: [
87
+ {
88
+ id: 4,
89
+ name: "龍-1",
90
+ type: "A"
91
+ }
92
+ ]
93
+ }
94
+ ];
95
+
96
+ const target = "B";
97
+ // console.log(JSON.stringify(a));
98
+
99
+ const result = a
100
+ .map((x) => x.custom.filter((c) => c.type === target))
101
+ .map((y) => y[0]);
102
+
103
+ console.log(JSON.stringify(result));
104
+
46
105
  ```

1

a

2021/06/26 08:53

投稿

k49977
k49977

スコア27

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