回答編集履歴

31

テキスト修正

2019/10/14 22:27

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -20,7 +20,7 @@
20
20
 
21
21
  ```
22
22
 
23
- の引数 table と item に型指定を追加して
23
+ 、reduceに与えている関数の引数 `table``item` に型指定を追加して
24
24
 
25
25
  ```typescript
26
26
 
@@ -28,11 +28,7 @@
28
28
 
29
29
  ```
30
30
 
31
- としてみるといかがでしょうか?
31
+ としてみるといかがでしょうか?次に、
32
-
33
-
34
-
35
- 次に、
36
32
 
37
33
 
38
34
 
@@ -56,8 +52,6 @@
56
52
 
57
53
 
58
54
 
59
-
60
-
61
55
  なお上記のうち、3, 4, 5, 6 は、reduce を使わないコードになっています。
62
56
 
63
57
 

30

テキスト修正

2019/10/14 22:27

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -200,7 +200,7 @@
200
200
 
201
201
 
202
202
 
203
- これまでの3つとは異なり、joinで要素を結合した文字列を作り、正規表現replaceしてから、 split, map で配列にすコードです。
203
+ これまでの3つとは異なり、文字列を経由した方法です。joinで要素を `#` で結合した文字列を作り、正規表現によるreplaceによって、一組になる要素を区切る `#` を `_` に置換してから、 split, map で、望む配列にすコードです。
204
204
 
205
205
 
206
206
 

29

テキスト修正

2019/10/14 17:44

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -168,15 +168,17 @@
168
168
 
169
169
 
170
170
 
171
- const ary2: StrAry[] = ary.map((e: string, i: number, self: StrAry) =>
171
+ const ary2: StrAry[] = ary.map((str: string, i: number, self: StrAry) =>
172
-
172
+
173
- i % 2 ? null : (i+1 < self.length ? [e, self[i+1]] : [e])
173
+ i % 2 ? null : (i+1 < self.length ? [str, self[i+1]] : [str])
174
-
174
+
175
- ).filter(e => e)
175
+ ).filter((a: StrAry | null) => a)
176
-
177
-
178
-
176
+
177
+
178
+
179
- console.log(ary2)
179
+ console.log(ary2)
180
+
181
+
180
182
 
181
183
 
182
184
 

28

テキスト修正

2019/10/14 17:34

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -66,31 +66,31 @@
66
66
 
67
67
 
68
68
 
69
- まずはじめに、yuki_90453さんがご質問に挙げられているコードに近いものを挙げます。
69
+ まずはじめに、yuki_90453さんがご質問に挙げられているコードに近いものを挙げます。(なお、以下のコードでは、ご質問のコードでは `table` という変数を、短い変数名の `t` にしています。)
70
-
71
-
72
-
70
+
71
+
72
+
73
- ```typescript
73
+ ```typescript
74
-
74
+
75
- type StrAry = string[]
75
+ type StrAry = string[]
76
-
77
-
78
-
76
+
77
+
78
+
79
- const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
79
+ const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
80
-
81
-
82
-
80
+
81
+
82
+
83
- const ary2: StrAry[] = ary.reduce((a: StrAry[], str: string, i: number) => {
83
+ const ary2: StrAry[] = ary.reduce((t: StrAry[], str: string, i: number) => {
84
84
 
85
85
  if (i % 2 === 0) {
86
86
 
87
- return [...a, [str]]
87
+ return [...t, [str]]
88
88
 
89
89
  }
90
90
 
91
- a[a.length - 1].push(str)
91
+ t[t.length - 1].push(str)
92
-
92
+
93
- return a
93
+ return t
94
94
 
95
95
  }, [])
96
96
 
@@ -130,9 +130,9 @@
130
130
 
131
131
 
132
132
 
133
- const ary2: StrAry[] = ary.reduce((a: StrAry[], str: string, i: number) =>
133
+ const ary2: StrAry[] = ary.reduce((t: StrAry[], str: string, i: number) =>
134
-
134
+
135
- i % 2 ? [...a.slice(0, a.length-1), [a[a.length-1][0], str]] : [...a, [str]]
135
+ i % 2 ? [...t.slice(0, t.length-1), [t[t.length-1][0], str]] : [...t, [str]]
136
136
 
137
137
  , [])
138
138
 

27

テキスト修正

2019/10/14 17:31

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,7 +2,45 @@
2
2
 
3
3
 
4
4
 
5
+ まず、
6
+
7
+
8
+
9
+ > ① reduceメソッドの 戻り値の累積変数の型を指定方法はありますでしょうか?
10
+
11
+ > 上記のコードの末尾 [[]]の事です。
12
+
13
+
14
+
15
+ については、
16
+
17
+ ```javascript
18
+
19
+ sku_list.reduce((table, item) => {
20
+
21
+ ```
22
+
23
+ の引数、 table と item に型指定を追加して
24
+
25
+ ```typescript
26
+
27
+ sku_list.reduce((table: string[][], item: string) => {
28
+
29
+ ```
30
+
31
+ としてみるといかがでしょうか?
32
+
33
+
34
+
35
+ 次に、
36
+
37
+
38
+
39
+ > ② reduceメソッドを使った方がわかりやすいと聞いて作ってみたのですが、私のコードは非常に見づらくわかりにくいです。わかりやすいように書きたいのですが、ご指摘頂けないでしょうか?
40
+
41
+
42
+
5
- この回答では、以下の6つのコードを順に挙げます。
43
+ については、以下の6つのコードを順に挙げます。
6
44
 
7
45
  1. yuki_90453さんがご質問に挙げられているコードに近いもの(reduceを使用)
8
46
 
@@ -20,15 +58,7 @@
20
58
 
21
59
 
22
60
 
23
- 上記のうち、3, 4, 5, 6 は、ご質問に
24
-
25
-
26
-
27
- > ② reduceメソッドを使った方がわかりやすいと聞いて作ってみたのですが、私のコードは非常に見づらくわかりにくいです。わかりやすいように書きたいのですが、ご指摘頂けないでしょうか?
28
-
29
-
30
-
31
- とあったことに応えして、 reduce を使わないコードになっています。
61
+ 上記のうち3, 4, 5, 6 は、reduce を使わないコードになっています。
32
62
 
33
63
 
34
64
 

26

テキスト修正

2019/10/14 17:02

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -248,7 +248,7 @@
248
248
 
249
249
 
250
250
 
251
- 上記のコード例 5 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様関数`myChunk`を(再帰を使って、)自作しました。
251
+ 上記のコード例 5 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様関数`myChunk`を(再帰を使って、)自作しました。
252
252
 
253
253
  ```typescript
254
254
 

25

テキスト修正

2019/10/14 16:40

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -248,7 +248,7 @@
248
248
 
249
249
 
250
250
 
251
- 上記のコード例 5 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様な関数`myChunk`を(再帰を使って、)自作しま
251
+ 上記のコード例 5 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様な関数`myChunk`を(再帰を使って、)自作しました
252
252
 
253
253
  ```typescript
254
254
 

24

テキスト修正

2019/10/14 16:38

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -168,7 +168,7 @@
168
168
 
169
169
 
170
170
 
171
- これまでの3つとは異なり、joinによる文字列を経由して、正規表現によるreplace および split, map を使うコードです。
171
+ これまでの3つとは異なり、joinで要素を結合した文字列を作り、正規表現replaceしてから、 split, map で配列に戻すコードです。
172
172
 
173
173
 
174
174
 

23

テキスト修正

2019/10/14 16:35

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -8,13 +8,13 @@
8
8
 
9
9
  2. 上記 1. の reduceに与える関数の、コード行を減らしたもの
10
10
 
11
+ 3. reduce の替わりに、map と filter を使用する例
12
+
13
+ 4. 文字列を経由して、正規表現によるreplaceおよび split, map を使う例
14
+
11
- 3. [loadsh](https://lodash.com) の [_.chunk](https://lodash.com/docs/#chunk) を使用した例
15
+ 5. [loadsh](https://lodash.com) の [_.chunk](https://lodash.com/docs/#chunk) を使用した例
12
-
16
+
13
- 4. 上記 3. の _.chunk と同様な関数を自作
17
+ 6. 上記 5. の _.chunk と同様な関数を自作
14
-
15
- 5. reduce の替わりに、map と filter を使用する例
16
-
17
- 6. 文字列を経由して、正規表現によるreplaceおよび split, map を使う例
18
18
 
19
19
 
20
20
 
@@ -36,6 +36,10 @@
36
36
 
37
37
 
38
38
 
39
+ まずはじめに、yuki_90453さんがご質問に挙げられているコードに近いものを挙げます。
40
+
41
+
42
+
39
43
  ```typescript
40
44
 
41
45
  type StrAry = string[]
@@ -114,15 +118,105 @@
114
118
 
115
119
 
116
120
 
117
- 上記のコードで、reduce を使って一度にやろうとしていることを、後述のコード例 5 では、map と filter の二段階にすることで、若干、読みやすくしています。
118
-
119
121
 
120
122
 
121
123
  ### コード例 3
122
124
 
123
125
 
124
126
 
127
+ 上記のコード例 2 で、reduce で一度にやろうとしていることを、map と filter の二段階を踏むコードです。
128
+
129
+
130
+
131
+ ```typescript
132
+
133
+ type StrAry = string[]
134
+
135
+
136
+
137
+ const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
138
+
139
+
140
+
141
+ const ary2: StrAry[] = ary.map((e: string, i: number, self: StrAry) =>
142
+
143
+ i % 2 ? null : (i+1 < self.length ? [e, self[i+1]] : [e])
144
+
145
+ ).filter(e => e)
146
+
147
+
148
+
149
+ console.log(ary2)
150
+
151
+
152
+
153
+ ```
154
+
155
+ - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/XWWdXMo?editors=0012](https://codepen.io/jun68ykt/pen/XWWdXMo?editors=0012)
156
+
157
+
158
+
159
+
160
+
161
+
162
+
163
+
164
+
165
+
166
+
167
+ ### コード例 4
168
+
169
+
170
+
171
+ これまでの3つとは異なり、joinによる文字列を経由して、正規表現によるreplace および split, map を使うコードです。
172
+
173
+
174
+
175
+ ```typescript
176
+
177
+ type StrAry = string[]
178
+
179
+
180
+
181
+ const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
182
+
183
+
184
+
185
+ const ary2: StrAry[] = ary.join('#')
186
+
187
+                  .replace(/([^#]+)#([^#]+)/g, '$1_$2')
188
+
189
+ .split('#')
190
+
191
+ .map((s: string) => s.split('_'))
192
+
193
+
194
+
195
+ console.log(ary2)
196
+
197
+
198
+
199
+ ```
200
+
201
+ - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/rNNeeMa?editors=0012](https://codepen.io/jun68ykt/pen/rNNeeMa?editors=0012)
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+ ### コード例 5
216
+
217
+
218
+
125
- lodash の [_.chunk](https://lodash.com/docs/#chunk) を使うと、以下でできます。
219
+ 配列やオブジェクトの操作で便利なライブラリlodash の [_.chunk](https://lodash.com/docs/#chunk) を使うと、以下でできます。
126
220
 
127
221
 
128
222
 
@@ -150,11 +244,11 @@
150
244
 
151
245
 
152
246
 
153
- ### コード例 4
247
+ ### コード例 6
154
-
155
-
156
-
248
+
249
+
250
+
157
- のコード例 3 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様な関数`myChunk`を(再帰を使って、)自作します。
251
+ 上記のコード例 5 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様な関数`myChunk`を(再帰を使って、)自作します。
158
252
 
159
253
  ```typescript
160
254
 
@@ -204,80 +298,6 @@
204
298
 
205
299
 
206
300
 
207
- ### コード例 5
208
-
209
-
210
-
211
- 先のコード例 2 から考えたコードです。reduce で一度にやらずに、map と filter の二段階を踏むことで、若干、読みやすくなったかと思います。
212
-
213
-
214
-
215
- ```typescript
216
-
217
- type StrAry = string[]
218
-
219
-
220
-
221
- const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
222
-
223
-
224
-
225
- const ary2: StrAry[] = ary.map((e: string, i: number, self: StrAry) =>
226
-
227
- i % 2 ? null : (i+1 < self.length ? [e, self[i+1]] : [e])
228
-
229
- ).filter(e => e)
230
-
231
-
232
-
233
- console.log(ary2)
234
-
235
-
236
-
237
- ```
238
-
239
- - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/XWWdXMo?editors=0012](https://codepen.io/jun68ykt/pen/XWWdXMo?editors=0012)
240
-
241
-
242
-
243
- ### コード例 6
244
-
245
-
246
-
247
- joinによる文字列を経由して、正規表現によるreplace および split, map を使うコードです。
248
-
249
-
250
-
251
- ```typescript
252
-
253
- type StrAry = string[]
254
-
255
-
256
-
257
- const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
258
-
259
-
260
-
261
- const ary2: StrAry[] = ary.join('#')
262
-
263
-                  .replace(/([^#]+)#([^#]+)/g, '$1_$2')
264
-
265
- .split('#')
266
-
267
- .map((s: string) => s.split('_'))
268
-
269
-
270
-
271
- console.log(ary2)
272
-
273
-
274
-
275
- ```
276
-
277
- - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/rNNeeMa?editors=0012](https://codepen.io/jun68ykt/pen/rNNeeMa?editors=0012)
278
-
279
-
280
-
281
301
 
282
302
 
283
303
 

22

テキスト修正

2019/10/14 16:28

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -114,7 +114,7 @@
114
114
 
115
115
 
116
116
 
117
-
117
+ 上記のコードで、reduce を使って一度にやろうとしていることを、後述のコード例 5 では、map と filter の二段階にすることで、若干、読みやすくしています。
118
118
 
119
119
 
120
120
 

21

テキスト修正

2019/10/14 16:19

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  3. [loadsh](https://lodash.com) の [_.chunk](https://lodash.com/docs/#chunk) を使用した例
12
12
 
13
- 4. 再帰を使って、上記 3. の _.chunk と同様な関数を自作
13
+ 4. 上記 3. の _.chunk と同様な関数を自作
14
14
 
15
15
  5. reduce の替わりに、map と filter を使用する例
16
16
 

20

テキスト修正

2019/10/14 16:14

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -154,7 +154,7 @@
154
154
 
155
155
 
156
156
 
157
- 再帰を使って、先のコード例 3 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様な関数`myChunk`を自作します。
157
+ 先のコード例 3 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様な関数`myChunk`を(再帰を使って、)自作します。
158
158
 
159
159
  ```typescript
160
160
 

19

テキスト修正

2019/10/14 16:11

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -208,7 +208,7 @@
208
208
 
209
209
 
210
210
 
211
- 先のコード例 2 から考えたコードです。reduce で一度にやらずに、map と filter を使うことで、若干、読みやすくなったかと思います。
211
+ 先のコード例 2 から考えたコードです。reduce で一度にやらずに、map と filter の二段階踏むことで、若干、読みやすくなったかと思います。
212
212
 
213
213
 
214
214
 

18

テキスト修正

2019/10/14 16:09

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -208,7 +208,7 @@
208
208
 
209
209
 
210
210
 
211
- コード例 1 から考えたコードです。reduce の替わりに、map と filter を使います。
211
+ 先のコード例 2 から考えたコードです。reduce で一度やらずに、map と filter を使うことで、若干、読みやすくなったかと思います。
212
212
 
213
213
 
214
214
 

17

テキスト修正

2019/10/14 16:08

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  4. 再帰を使って、上記 3. の _.chunk と同様な関数を自作
14
14
 
15
- 5. reduce も lodash も使ない例(map と filter を使用)
15
+ 5. reduce の替りに、map と filter を使用する例
16
16
 
17
17
  6. 文字列を経由して、正規表現によるreplaceおよび split, map を使う例
18
18
 
@@ -208,7 +208,7 @@
208
208
 
209
209
 
210
210
 
211
- reduceを使ないかつ、 lodash も使わない案も挙げておきます。mapとfilterを使います。
211
+ コード例 1 から考えたコードです。reduce の替りに、map filter を使います。
212
212
 
213
213
 
214
214
 

16

テキスト修正

2019/10/14 16:00

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -10,11 +10,13 @@
10
10
 
11
11
  3. [loadsh](https://lodash.com) の [_.chunk](https://lodash.com/docs/#chunk) を使用した例
12
12
 
13
+ 4. 再帰を使って、上記 3. の _.chunk と同様な関数を自作
14
+
13
- 4. reduce も lodash も使わない例(map と filter を使用)
15
+ 5. reduce も lodash も使わない例(map と filter を使用)
14
-
16
+
15
- 5. 文字列を経由して、正規表現によるreplaceおよび split, map を使う例
17
+ 6. 文字列を経由して、正規表現によるreplaceおよび split, map を使う例
16
-
17
- 6. 再帰を使って、上記 3. の _.chunk と同様な関数を自作
18
+
19
+
18
20
 
19
21
 
20
22
 
@@ -146,10 +148,66 @@
146
148
 
147
149
 
148
150
 
151
+
152
+
149
153
  ### コード例 4
150
154
 
151
155
 
152
156
 
157
+ 再帰を使って、先のコード例 3 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様な関数`myChunk`を自作します。
158
+
159
+ ```typescript
160
+
161
+ type StrAry = string[]
162
+
163
+
164
+
165
+ const myChunk = (a: StrAry, n: number) => (a.length > 0 ? [a.slice(0, n), ...myChunk(a.slice(n), n)] : [])
166
+
167
+
168
+
169
+ const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
170
+
171
+
172
+
173
+ const ary2: StrAry[] = myChunk(ary, 2)
174
+
175
+ console.log(ary2)
176
+
177
+
178
+
179
+ const ary3: StrAry[] = myChunk(ary, 3)
180
+
181
+ console.log(ary3)
182
+
183
+
184
+
185
+ const ary4: StrAry[] = myChunk(ary, 4)
186
+
187
+ console.log(ary4)
188
+
189
+
190
+
191
+ const ary7: StrAry[] = myChunk(ary, 7)
192
+
193
+ console.log(ary7)
194
+
195
+ ```
196
+
197
+ - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/BaaKzMK?editors=0012](https://codepen.io/jun68ykt/pen/BaaKzMK?editors=0012)
198
+
199
+
200
+
201
+
202
+
203
+
204
+
205
+
206
+
207
+ ### コード例 5
208
+
209
+
210
+
153
211
  reduceを使わない、かつ、 lodash も使わない案も挙げておきます。mapとfilterを使います。
154
212
 
155
213
 
@@ -182,7 +240,7 @@
182
240
 
183
241
 
184
242
 
185
- ### コード例 5
243
+ ### コード例 6
186
244
 
187
245
 
188
246
 
@@ -220,52 +278,6 @@
220
278
 
221
279
 
222
280
 
223
- ### コード例 6
224
-
225
-
226
-
227
- 再帰を使って、先のコード例 3 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様な関数`myChank`を自作します。
228
-
229
- ```typescript
230
-
231
- type StrAry = string[]
232
-
233
-
234
-
235
- const myChunk = (a: StrAry, n: number) => (a.length > 0 ? [a.slice(0, n), ...myChunk(a.slice(n), n)] : [])
236
-
237
-
238
-
239
- const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
240
-
241
-
242
-
243
- const ary2: StrAry[] = myChunk(ary, 2)
244
-
245
- console.log(ary2)
246
-
247
-
248
-
249
- const ary3: StrAry[] = myChunk(ary, 3)
250
-
251
- console.log(ary3)
252
-
253
-
254
-
255
- const ary4: StrAry[] = myChunk(ary, 4)
256
-
257
- console.log(ary4)
258
-
259
-
260
-
261
- const ary7: StrAry[] = myChunk(ary, 7)
262
-
263
- console.log(ary7)
264
-
265
- ```
266
-
267
- - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/BaaKzMK?editors=0012](https://codepen.io/jun68ykt/pen/BaaKzMK?editors=0012)
268
-
269
281
 
270
282
 
271
283
 

15

テキスト修正

2019/10/14 15:54

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- この回答では、以下の5つのコードを順に挙げます。
5
+ この回答では、以下のつのコードを順に挙げます。
6
6
 
7
7
  1. yuki_90453さんがご質問に挙げられているコードに近いもの(reduceを使用)
8
8
 

14

テキスト修正

2019/10/14 15:49

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -14,9 +14,11 @@
14
14
 
15
15
  5. 文字列を経由して、正規表現によるreplaceおよび split, map を使う例
16
16
 
17
-
17
+ 6. 再帰を使って、上記 3. の _.chunk と同様な関数を自作
18
-
18
+
19
+
20
+
19
- 上記のうち、3, 4, 5 は、ご質問に
21
+ 上記のうち、3, 4, 5, 6 は、ご質問に
20
22
 
21
23
 
22
24
 
@@ -218,4 +220,54 @@
218
220
 
219
221
 
220
222
 
223
+ ### コード例 6
224
+
225
+
226
+
227
+ 再帰を使って、先のコード例 3 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様な関数`myChank`を自作します。
228
+
229
+ ```typescript
230
+
231
+ type StrAry = string[]
232
+
233
+
234
+
235
+ const myChunk = (a: StrAry, n: number) => (a.length > 0 ? [a.slice(0, n), ...myChunk(a.slice(n), n)] : [])
236
+
237
+
238
+
239
+ const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
240
+
241
+
242
+
243
+ const ary2: StrAry[] = myChunk(ary, 2)
244
+
245
+ console.log(ary2)
246
+
247
+
248
+
249
+ const ary3: StrAry[] = myChunk(ary, 3)
250
+
251
+ console.log(ary3)
252
+
253
+
254
+
255
+ const ary4: StrAry[] = myChunk(ary, 4)
256
+
257
+ console.log(ary4)
258
+
259
+
260
+
261
+ const ary7: StrAry[] = myChunk(ary, 7)
262
+
263
+ console.log(ary7)
264
+
265
+ ```
266
+
267
+ - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/BaaKzMK?editors=0012](https://codepen.io/jun68ykt/pen/BaaKzMK?editors=0012)
268
+
269
+
270
+
271
+
272
+
221
273
  以上、参考になれば幸いです。

13

テキスト修正

2019/10/14 15:45

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -200,7 +200,7 @@
200
200
 
201
201
  const ary2: StrAry[] = ary.join('#')
202
202
 
203
-                 .replace(/([^#]+)#([^#]+)/g, '$1_$2')
203
+                  .replace(/([^#]+)#([^#]+)/g, '$1_$2')
204
204
 
205
205
  .split('#')
206
206
 

12

テキスト修正

2019/10/14 14:51

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -198,11 +198,19 @@
198
198
 
199
199
 
200
200
 
201
+ const ary2: StrAry[] = ary.join('#')
202
+
201
- const ary2: StrAry[] = ary.join('#').replace(/([^#]+)#([^#]+)/g, '$1_$2').split('#').map((s: string) => s.split('_'))
203
+                 .replace(/([^#]+)#([^#]+)/g, '$1_$2')
204
+
202
-
205
+ .split('#')
206
+
203
-
207
+ .map((s: string) => s.split('_'))
204
-
208
+
209
+
210
+
205
- console.log(ary2)
211
+ console.log(ary2)
212
+
213
+
206
214
 
207
215
  ```
208
216
 

11

テキスト修正

2019/10/14 14:49

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -16,6 +16,18 @@
16
16
 
17
17
 
18
18
 
19
+ 上記のうち、3, 4, 5 は、ご質問に
20
+
21
+
22
+
23
+ > ② reduceメソッドを使った方がわかりやすいと聞いて作ってみたのですが、私のコードは非常に見づらくわかりにくいです。わかりやすいように書きたいのですが、ご指摘頂けないでしょうか?
24
+
25
+
26
+
27
+ とあったことにお応えして、 reduce を使わないコードになっています。
28
+
29
+
30
+
19
31
  ### コード例 1
20
32
 
21
33
 
@@ -106,15 +118,7 @@
106
118
 
107
119
 
108
120
 
109
- ご質問にある、
110
-
111
-
112
-
113
- > ② reduceメソッドを使った方がわかりやすいと聞いて作ってみたのですが、私のコードは非常に見づらくわかりにくいです。わかりやすいように書きたいのですが、ご指摘頂けないでしょうか?
114
-
115
-
116
-
117
- に対する一案として、lodash の [_.chunk](https://lodash.com/docs/#chunk) を使うと、以下でできます。
121
+ lodash の [_.chunk](https://lodash.com/docs/#chunk) を使うと、以下でできます。
118
122
 
119
123
 
120
124
 
@@ -144,7 +148,7 @@
144
148
 
145
149
 
146
150
 
147
- reduceを使わない、かつ、 lodash も使わない案も挙げておきます。
151
+ reduceを使わない、かつ、 lodash も使わない案も挙げておきます。mapとfilterを使います。
148
152
 
149
153
 
150
154
 

10

テキスト修正

2019/10/14 14:44

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  3. [loadsh](https://lodash.com) の [_.chunk](https://lodash.com/docs/#chunk) を使用した例
12
12
 
13
- 4. reduce も lodash も使わない例
13
+ 4. reduce も lodash も使わない例(map と filter を使用)
14
14
 
15
15
  5. 文字列を経由して、正規表現によるreplaceおよび split, map を使う例
16
16
 

9

テキスト修正

2019/10/14 14:40

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- この回答では、以下のつのコードを順に挙げます。
5
+ この回答では、以下の5つのコードを順に挙げます。
6
6
 
7
7
  1. yuki_90453さんがご質問に挙げられているコードに近いもの(reduceを使用)
8
8
 
@@ -12,6 +12,8 @@
12
12
 
13
13
  4. reduce も lodash も使わない例
14
14
 
15
+ 5. 文字列を経由して、正規表現によるreplaceおよび split, map を使う例
16
+
15
17
 
16
18
 
17
19
  ### コード例 1
@@ -174,6 +176,34 @@
174
176
 
175
177
 
176
178
 
179
+ ### コード例 5
180
+
181
+
182
+
183
+ joinによる文字列を経由して、正規表現によるreplace および split, map を使うコードです。
184
+
185
+
186
+
187
+ ```typescript
188
+
189
+ type StrAry = string[]
190
+
191
+
192
+
193
+ const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
194
+
195
+
196
+
197
+ const ary2: StrAry[] = ary.join('#').replace(/([^#]+)#([^#]+)/g, '$1_$2').split('#').map((s: string) => s.split('_'))
198
+
199
+
200
+
201
+ console.log(ary2)
202
+
203
+ ```
204
+
205
+ - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/rNNeeMa?editors=0012](https://codepen.io/jun68ykt/pen/rNNeeMa?editors=0012)
206
+
177
207
 
178
208
 
179
209
  以上、参考になれば幸いです。

8

テキスト修正

2019/10/14 14:36

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  2. 上記 1. の reduceに与える関数の、コード行を減らしたもの
10
10
 
11
- 3. loadsh の chunk を使用した例
11
+ 3. [loadsh](https://lodash.com)[_.chunk](https://lodash.com/docs/#chunk) を使用した例
12
12
 
13
13
  4. reduce も lodash も使わない例
14
14
 

7

テキスト修正

2019/10/14 14:07

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -2,7 +2,19 @@
2
2
 
3
3
 
4
4
 
5
+ この回答では、以下の4つのコードを順に挙げます。
6
+
7
+ 1. yuki_90453さんがご質問に挙げられているコードに近いもの(reduceを使用)
8
+
9
+ 2. 上記 1. の reduceに与える関数の、コード行を減らしたもの
10
+
11
+ 3. loadsh の chunk を使用した例
12
+
13
+ 4. reduce も lodash も使わない例
14
+
15
+
16
+
5
- 以下でいかがでしょう?
17
+ ### コード例 1
6
18
 
7
19
 
8
20
 
@@ -48,7 +60,11 @@
48
60
 
49
61
 
50
62
 
63
+ ### コード例 2
64
+
65
+
66
+
51
- 以下は、上記のコードの reduce に与える関数本体で、 return を使わないで済ませるようにしたものです。行数は減りましたが、可読性に難アリかもしれません。
67
+ 以下は、のコード例1の reduce に与える関数本体で、 return を使わないで済ませるようにしたものです。行数は減りましたが、可読性に難アリかもしれません。
52
68
 
53
69
 
54
70
 
@@ -80,11 +96,15 @@
80
96
 
81
97
 
82
98
 
83
- 参考になれば幸いです。
84
99
 
85
100
 
86
101
 
102
+
87
- ### 補足
103
+ ### コード例 3
104
+
105
+
106
+
107
+ ご質問にある、
88
108
 
89
109
 
90
110
 
@@ -92,7 +112,7 @@
92
112
 
93
113
 
94
114
 
95
- ついて補足しますと、lodash の [_.chunk](https://lodash.com/docs/#chunk) を使うと、以下でできます。
115
+ る一案して、lodash の [_.chunk](https://lodash.com/docs/#chunk) を使うと、以下でできます。
96
116
 
97
117
 
98
118
 
@@ -118,7 +138,7 @@
118
138
 
119
139
 
120
140
 
121
- ### 補足2
141
+ ### コード例 4
122
142
 
123
143
 
124
144
 
@@ -151,3 +171,9 @@
151
171
  ```
152
172
 
153
173
  - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/XWWdXMo?editors=0012](https://codepen.io/jun68ykt/pen/XWWdXMo?editors=0012)
174
+
175
+
176
+
177
+
178
+
179
+ 以上、参考になれば幸いです。

6

テキスト修正

2019/10/14 13:54

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -115,3 +115,39 @@
115
115
  ```
116
116
 
117
117
  - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/qBBZOzv?editors=0012](https://codepen.io/jun68ykt/pen/qBBZOzv?editors=0012)
118
+
119
+
120
+
121
+ ### 補足2
122
+
123
+
124
+
125
+ reduceを使わない、かつ、 lodash も使わない案も挙げておきます。
126
+
127
+
128
+
129
+ ```typescript
130
+
131
+ type StrAry = string[]
132
+
133
+
134
+
135
+ const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
136
+
137
+
138
+
139
+ const ary2: StrAry[] = ary.map((e: string, i: number, self: StrAry) =>
140
+
141
+ i % 2 ? null : (i+1 < self.length ? [e, self[i+1]] : [e])
142
+
143
+ ).filter(e => e)
144
+
145
+
146
+
147
+ console.log(ary2)
148
+
149
+
150
+
151
+ ```
152
+
153
+ - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/XWWdXMo?editors=0012](https://codepen.io/jun68ykt/pen/XWWdXMo?editors=0012)

5

テキスト修正

2019/10/14 13:41

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -114,4 +114,4 @@
114
114
 
115
115
  ```
116
116
 
117
- - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/XWWqBBZOzvmyq?editors=0012](https://codepen.io/jun68ykt/pen/qBBZOzv?editors=0012)
117
+ - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/qBBZOzv?editors=0012](https://codepen.io/jun68ykt/pen/qBBZOzv?editors=0012)

4

テキスト修正

2019/10/14 13:32

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -48,7 +48,7 @@
48
48
 
49
49
 
50
50
 
51
- 以下は、上記のコードの reduce に与える関数本体で、 return を使わないで済ませるようにしたものです。
51
+ 以下は、上記のコードの reduce に与える関数本体で、 return を使わないで済ませるようにしたものです。行数は減りましたが、可読性に難アリかもしれません。
52
52
 
53
53
 
54
54
 

3

テキスト修正

2019/10/14 13:23

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -81,3 +81,37 @@
81
81
 
82
82
 
83
83
  参考になれば幸いです。
84
+
85
+
86
+
87
+ ### 補足
88
+
89
+
90
+
91
+ > ② reduceメソッドを使った方がわかりやすいと聞いて作ってみたのですが、私のコードは非常に見づらくわかりにくいです。わかりやすいように書きたいのですが、ご指摘頂けないでしょうか?
92
+
93
+
94
+
95
+ について補足しますと、lodash の [_.chunk](https://lodash.com/docs/#chunk) を使うと、以下でできます。
96
+
97
+
98
+
99
+ ```typescript
100
+
101
+ type StrAry = string[]
102
+
103
+
104
+
105
+ const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
106
+
107
+
108
+
109
+ const ary2: StrAry[] = _.chunk(ary, 2)
110
+
111
+
112
+
113
+ console.log(ary2)
114
+
115
+ ```
116
+
117
+ - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/XWWqBBZOzvmyq?editors=0012](https://codepen.io/jun68ykt/pen/qBBZOzv?editors=0012)

2

テキスト修正

2019/10/14 13:19

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -48,4 +48,36 @@
48
48
 
49
49
 
50
50
 
51
+ 以下は、上記のコードの reduce に与える関数本体で、 return を使わないで済ませるようにしたものです。
52
+
53
+
54
+
55
+ ```typescript
56
+
57
+ type StrAry = string[]
58
+
59
+
60
+
61
+ const ary: StrAry = ['aaa', 'bbb', 'ccc', 'ddd', 'eee', 'fff', 'ggg']
62
+
63
+
64
+
65
+ const ary2: StrAry[] = ary.reduce((a: StrAry[], str: string, i: number) =>
66
+
67
+ i % 2 ? [...a.slice(0, a.length-1), [a[a.length-1][0], str]] : [...a, [str]]
68
+
69
+ , [])
70
+
71
+
72
+
73
+ console.log(ary2)
74
+
75
+ ```
76
+
77
+
78
+
79
+ - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/XWWdmyq?editors=0012](https://codepen.io/jun68ykt/pen/XWWdmyq?editors=0012)
80
+
81
+
82
+
51
83
  参考になれば幸いです。

1

テキスト修正

2019/10/14 13:10

投稿

jun68ykt
jun68ykt

スコア9058

test CHANGED
@@ -38,7 +38,7 @@
38
38
 
39
39
  ```
40
40
 
41
- - **動作確認用 jsFiddle:** [https://jsfiddle.net/jun68ykt/6cq5gdv8/6/](https://jsfiddle.net/jun68ykt/6cq5gdv8/6/)
41
+ - **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/wvvGKQW?editors=0012](https://codepen.io/jun68ykt/pen/wvvGKQW?editors=0012)
42
42
 
43
43
 
44
44