回答編集履歴
31
テキスト修正
test
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
|
21
21
|
```
|
22
22
|
|
23
|
-
の引数
|
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
テキスト修正
test
CHANGED
@@ -200,7 +200,7 @@
|
|
200
200
|
|
201
201
|
|
202
202
|
|
203
|
-
これまでの3つとは異なり、joinで要素を結合した文字列を作り、正規表現
|
203
|
+
これまでの3つとは異なり、文字列を経由した方法です。joinで要素を `#` で結合した文字列を作り、正規表現によるreplaceによって、一組になる要素を区切る `#` を `_` に置換してから、 split, map で、望む配列にするコードです。
|
204
204
|
|
205
205
|
|
206
206
|
|
29
テキスト修正
test
CHANGED
@@ -168,15 +168,17 @@
|
|
168
168
|
|
169
169
|
|
170
170
|
|
171
|
-
const ary2: StrAry[] = ary.map((
|
171
|
+
const ary2: StrAry[] = ary.map((str: string, i: number, self: StrAry) =>
|
172
|
-
|
172
|
+
|
173
|
-
i % 2 ? null : (i+1 < self.length ? [
|
173
|
+
i % 2 ? null : (i+1 < self.length ? [str, self[i+1]] : [str])
|
174
|
-
|
174
|
+
|
175
|
-
).filter(
|
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
テキスト修正
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((
|
83
|
+
const ary2: StrAry[] = ary.reduce((t: StrAry[], str: string, i: number) => {
|
84
84
|
|
85
85
|
if (i % 2 === 0) {
|
86
86
|
|
87
|
-
return [...
|
87
|
+
return [...t, [str]]
|
88
88
|
|
89
89
|
}
|
90
90
|
|
91
|
-
|
91
|
+
t[t.length - 1].push(str)
|
92
|
-
|
92
|
+
|
93
|
-
return
|
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((
|
133
|
+
const ary2: StrAry[] = ary.reduce((t: StrAry[], str: string, i: number) =>
|
134
|
-
|
134
|
+
|
135
|
-
i % 2 ? [...
|
135
|
+
i % 2 ? [...t.slice(0, t.length-1), [t[t.length-1][0], str]] : [...t, [str]]
|
136
136
|
|
137
137
|
, [])
|
138
138
|
|
27
テキスト修正
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
|
-
|
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
|
-
|
61
|
+
なお上記のうち、3, 4, 5, 6 は、reduce を使わないコードになっています。
|
32
62
|
|
33
63
|
|
34
64
|
|
26
テキスト修正
test
CHANGED
@@ -248,7 +248,7 @@
|
|
248
248
|
|
249
249
|
|
250
250
|
|
251
|
-
上記のコード例 5 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様
|
251
|
+
上記のコード例 5 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様の関数`myChunk`を(再帰を使って、)自作しました。
|
252
252
|
|
253
253
|
```typescript
|
254
254
|
|
25
テキスト修正
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
テキスト修正
test
CHANGED
@@ -168,7 +168,7 @@
|
|
168
168
|
|
169
169
|
|
170
170
|
|
171
|
-
これまでの3つとは異なり、join
|
171
|
+
これまでの3つとは異なり、joinで要素を結合した文字列を作り、正規表現でreplaceしてから、 split, map で配列に戻すコードです。
|
172
172
|
|
173
173
|
|
174
174
|
|
23
テキスト修正
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
|
-
|
15
|
+
5. [loadsh](https://lodash.com) の [_.chunk](https://lodash.com/docs/#chunk) を使用した例
|
12
|
-
|
16
|
+
|
13
|
-
|
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
|
-
### コード例
|
247
|
+
### コード例 6
|
154
|
-
|
155
|
-
|
156
|
-
|
248
|
+
|
249
|
+
|
250
|
+
|
157
|
-
|
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
テキスト修正
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
テキスト修正
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.
|
13
|
+
4. 上記 3. の _.chunk と同様な関数を自作
|
14
14
|
|
15
15
|
5. reduce の替わりに、map と filter を使用する例
|
16
16
|
|
20
テキスト修正
test
CHANGED
@@ -154,7 +154,7 @@
|
|
154
154
|
|
155
155
|
|
156
156
|
|
157
|
-
|
157
|
+
先のコード例 3 で使った、lodash の [_.chunk](https://lodash.com/docs/#chunk) と同様な関数`myChunk`を(再帰を使って、)自作します。
|
158
158
|
|
159
159
|
```typescript
|
160
160
|
|
19
テキスト修正
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
テキスト修正
test
CHANGED
@@ -208,7 +208,7 @@
|
|
208
208
|
|
209
209
|
|
210
210
|
|
211
|
-
コード例
|
211
|
+
先のコード例 2 から考えたコードです。reduce で一度にやらずに、map と filter を使うことで、若干、読みやすくなったかと思います。
|
212
212
|
|
213
213
|
|
214
214
|
|
17
テキスト修正
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
4. 再帰を使って、上記 3. の _.chunk と同様な関数を自作
|
14
14
|
|
15
|
-
5. reduce
|
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
|
211
|
+
コード例 1 から考えたコードです。reduce の替わりに、map と filter を使います。
|
212
212
|
|
213
213
|
|
214
214
|
|
16
テキスト修正
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
|
-
|
15
|
+
5. reduce も lodash も使わない例(map と filter を使用)
|
14
|
-
|
16
|
+
|
15
|
-
|
17
|
+
6. 文字列を経由して、正規表現によるreplaceおよび split, map を使う例
|
16
|
-
|
17
|
-
|
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
|
-
### コード例
|
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
テキスト修正
test
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
|
4
4
|
|
5
|
-
この回答では、以下の
|
5
|
+
この回答では、以下の6つのコードを順に挙げます。
|
6
6
|
|
7
7
|
1. yuki_90453さんがご質問に挙げられているコードに近いもの(reduceを使用)
|
8
8
|
|
14
テキスト修正
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
テキスト修正
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
テキスト修正
test
CHANGED
@@ -198,11 +198,19 @@
|
|
198
198
|
|
199
199
|
|
200
200
|
|
201
|
+
const ary2: StrAry[] = ary.join('#')
|
202
|
+
|
201
|
-
|
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
テキスト修正
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
|
-
|
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
テキスト修正
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
テキスト修正
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
テキスト修正
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
テキスト修正
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
|
-
以下は、
|
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
|
-
に
|
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
|
-
###
|
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
テキスト修正
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
テキスト修正
test
CHANGED
@@ -114,4 +114,4 @@
|
|
114
114
|
|
115
115
|
```
|
116
116
|
|
117
|
-
- **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/
|
117
|
+
- **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/qBBZOzv?editors=0012](https://codepen.io/jun68ykt/pen/qBBZOzv?editors=0012)
|
4
テキスト修正
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
テキスト修正
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
テキスト修正
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
テキスト修正
test
CHANGED
@@ -38,7 +38,7 @@
|
|
38
38
|
|
39
39
|
```
|
40
40
|
|
41
|
-
- **動作確認用
|
41
|
+
- **動作確認用 CodePen:** [https://codepen.io/jun68ykt/pen/wvvGKQW?editors=0012](https://codepen.io/jun68ykt/pen/wvvGKQW?editors=0012)
|
42
42
|
|
43
43
|
|
44
44
|
|