回答編集履歴

5

修正後コード対応

2018/02/06 11:10

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -105,3 +105,139 @@
105
105
  // こちらもいい感じの結果に
106
106
 
107
107
  ```
108
+
109
+
110
+
111
+ ---
112
+
113
+
114
+
115
+ 【追記】 グループ分けしたオブジェクトへの対応版
116
+
117
+
118
+
119
+ 条件変わってますので再度考え直してみます。
120
+
121
+ まぁ、オブジェクトはtoPairsを使って配列にしてしまえば消化試合です。
122
+
123
+
124
+
125
+ キーに引っかかるグループが存在しなかった場合を考慮して、
126
+
127
+ 存在しないグループは一度filterで消し飛ばすというガードも組み込みました。
128
+
129
+
130
+
131
+ ```JavaScript
132
+
133
+ const list = {
134
+
135
+ 'sports': [
136
+
137
+ {identify: 'soccer', name: 'サッカー'},
138
+
139
+ {identify: 'baseball', name: '野球'}
140
+
141
+ ],
142
+
143
+ 'nature': [
144
+
145
+ {identify: 'animal', name: '動物'},
146
+
147
+ {identify: 'flower', name: '花'}
148
+
149
+ ]
150
+
151
+ };
152
+
153
+ const groups = [
154
+
155
+ {identify:'sports', id: 1},
156
+
157
+ {identify:'nature', id: 2},
158
+
159
+ ];
160
+
161
+
162
+
163
+ const make = (tmpList, groups) =>
164
+
165
+ _(tmpList)
166
+
167
+ .toPairs()
168
+
169
+ .filter(([gname]) => _.find(groups, group => group.identify === gname))
170
+
171
+ .map(([gname, items]) => {
172
+
173
+ const group = _.find(groups, group => group.identify === gname);
174
+
175
+ return _.map(items, it => ({...it, group_id: group.id}));
176
+
177
+ })
178
+
179
+ .flatten()
180
+
181
+ .value()
182
+
183
+
184
+
185
+ result = make(list, groups)
186
+
187
+ ```
188
+
189
+
190
+
191
+ [https://codepen.io/travist/full/jrBjBz/](https://codepen.io/travist/full/jrBjBz/)にコピペすればちゃんと表示されることがわかります。
192
+
193
+ 結果:
194
+
195
+
196
+
197
+ ```JSON
198
+
199
+ [
200
+
201
+ {
202
+
203
+ "identify": "soccer",
204
+
205
+ "name": "サッカー",
206
+
207
+ "group_id": 1
208
+
209
+ },
210
+
211
+ {
212
+
213
+ "identify": "baseball",
214
+
215
+ "name": "野球",
216
+
217
+ "group_id": 1
218
+
219
+ },
220
+
221
+ {
222
+
223
+ "identify": "animal",
224
+
225
+ "name": "動物",
226
+
227
+ "group_id": 2
228
+
229
+ },
230
+
231
+ {
232
+
233
+ "identify": "flower",
234
+
235
+ "name": "花",
236
+
237
+ "group_id": 2
238
+
239
+ }
240
+
241
+ ]
242
+
243
+ ```

4

syntaxエラーを修正

2018/02/06 11:10

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -16,13 +16,37 @@
16
16
 
17
17
  .map(tmp =>
18
18
 
19
- _.map(groups, group => {...tmp, id: group.id})
19
+ _.map(groups, group => ({...tmp, id: group.id}))
20
20
 
21
21
  )
22
22
 
23
23
  .flatten()
24
24
 
25
25
  .values()
26
+
27
+
28
+
29
+ const users = [
30
+
31
+ { user: 'barney', age: 36, active: true },
32
+
33
+ { user: 'fred', age: 40, active: false },
34
+
35
+ { user: 'travis', age: 37, active: true}
36
+
37
+ ];
38
+
39
+ const ids = [
40
+
41
+ { id: 123 },
42
+
43
+ { id: 234 }
44
+
45
+ ];
46
+
47
+ console.log(make(users, ids));
48
+
49
+ // いい感じにでました
26
50
 
27
51
  ```
28
52
 
@@ -46,7 +70,7 @@
46
70
 
47
71
  tmpList
48
72
 
49
- .map(tmp => groups.map(group => {...tmp, id: group.id}))
73
+ .map(tmp => groups.map(group => ({...tmp, id: group.id})))
50
74
 
51
75
  .reduce((arr, items) => {
52
76
 
@@ -56,4 +80,28 @@
56
80
 
57
81
  }, [])
58
82
 
83
+
84
+
85
+ const users = [
86
+
87
+ { user: 'barney', age: 36, active: true },
88
+
89
+ { user: 'fred', age: 40, active: false },
90
+
91
+ { user: 'travis', age: 37, active: true}
92
+
93
+ ];
94
+
95
+ const ids = [
96
+
97
+ { id: 123 },
98
+
99
+ { id: 234 }
100
+
101
+ ];
102
+
103
+ console.log(make(users, ids));
104
+
105
+ // こちらもいい感じの結果に
106
+
59
107
  ```

3

tmp使ってなかった

2018/02/06 09:42

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  .map(tmp =>
18
18
 
19
- _.map(groups, group => {...tmpList, id: group.id})
19
+ _.map(groups, group => {...tmp, id: group.id})
20
20
 
21
21
  )
22
22
 
@@ -46,7 +46,7 @@
46
46
 
47
47
  tmpList
48
48
 
49
- .map(tmp => groups.map(group => {...tmpList, id: group.id}))
49
+ .map(tmp => groups.map(group => {...tmp, id: group.id}))
50
50
 
51
51
  .reduce((arr, items) => {
52
52
 

2

reduce使うルート間違ってるやん

2018/02/06 09:37

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -48,6 +48,12 @@
48
48
 
49
49
  .map(tmp => groups.map(group => {...tmpList, id: group.id}))
50
50
 
51
+ .reduce((arr, items) => {
52
+
51
- .reduce((arr, it) => { arr.push(it); return arr; }, [])
53
+ items.forEach(it => { arr.push(it) });
54
+
55
+ return arr;
56
+
57
+ }, [])
52
58
 
53
59
  ```

1

おまけ追加

2018/02/06 09:32

投稿

miyabi-sun
miyabi-sun

スコア21158

test CHANGED
@@ -25,3 +25,29 @@
25
25
  .values()
26
26
 
27
27
  ```
28
+
29
+
30
+
31
+ ---
32
+
33
+
34
+
35
+ 【おまけ】
36
+
37
+
38
+
39
+ reduce使うルートならネイティブJSでも出来そうなのでやりました。
40
+
41
+
42
+
43
+ ```JavaScript
44
+
45
+ const make = (tmpList, groups) =>
46
+
47
+ tmpList
48
+
49
+ .map(tmp => groups.map(group => {...tmpList, id: group.id}))
50
+
51
+ .reduce((arr, it) => { arr.push(it); return arr; }, [])
52
+
53
+ ```