回答編集履歴
15
テキスト修正
answer
CHANGED
@@ -5,15 +5,15 @@
|
|
5
5
|
とのことですが、
|
6
6
|
> 多重
|
7
7
|
|
8
|
-
とは、どの
|
8
|
+
とは、具体的にはどのような階層構造の中に目的の配列があるのかについて、ご質問からは読み取れませんでしたので、全体の配列の中のどこにあっても、長さが2で要素が文字列か数字であるような
|
9
9
|
|
10
10
|
> 一番小さい配列
|
11
11
|
|
12
|
-
を拾い出す
|
12
|
+
を拾い出すコードを回答します。なお、以下では、この
|
13
13
|
> 一番小さい配列
|
14
14
|
|
15
15
|
|
16
|
-
のことを `minimal
|
16
|
+
のことを `minimal な配列` と呼び、 minimal な配列の先頭要素を `head`, 2番目の要素を `tail` と呼ぶことにして、これらを変数名やプロパティ名、関数名に使っています。
|
17
17
|
|
18
18
|
### index.html
|
19
19
|
```html
|
14
テキスト修正
answer
CHANGED
@@ -57,7 +57,7 @@
|
|
57
57
|
</html>
|
58
58
|
```
|
59
59
|
|
60
|
-
上記で、選ばれたファイルの内容を受け取って、結果を返す `assort` という関数を
|
60
|
+
上記で、選ばれたファイルの内容を受け取って、結果を返す `assort` という関数を作りました。関数 `assort` は、以下のファイル `assort.js` の最後にあります。minimal な配列を収集した後、重複を除くための処理に、 lodash の [uniqBy](https://lodash.com/docs/4.17.15#uniqBy) を使っています。
|
61
61
|
|
62
62
|
### assort.js
|
63
63
|
```javascript
|
@@ -205,11 +205,11 @@
|
|
205
205
|
|
206
206
|
上記の回答に書いたコードでは、
|
207
207
|
|
208
|
-
- `getMinimals` が再帰関数になっているので、想定していない入力があると無限ループになる恐れがありますので、実用化するには何らかの対策が必要
|
208
|
+
- `getMinimals` が再帰関数になっているので、想定していない入力があると無限ループになる恐れがありますので、実用化するには何らかの対策が必要
|
209
209
|
|
210
|
-
- 一度、すべての minimal な配列を拾い出してから分類しているので、やや冗長なコードになってい
|
210
|
+
- 一度、すべての minimal な配列を拾い出してから分類しているので、やや冗長なコードになっています。
|
211
211
|
|
212
|
-
といった
|
212
|
+
といった課題が残りますが、各論はさておき、上記のコードで示したいことは、
|
213
213
|
|
214
214
|
1. 入力されたテキストを加工してJSONの配列にする。
|
215
215
|
2. JSONをパースして、JavaScript の配列を得る。
|
13
テキスト修正
answer
CHANGED
@@ -15,7 +15,7 @@
|
|
15
15
|
|
16
16
|
のことを `minimal` な配列と呼び、 minimal な配列の先頭要素を `head`, 2番目の要素を `tail` と呼ぶことにして、これらを変数名やプロパティ名、関数名に使っています。
|
17
17
|
|
18
|
-
### index.html
|
18
|
+
### index.html
|
19
19
|
```html
|
20
20
|
<!DOCTYPE html>
|
21
21
|
<html lang="ja">
|
@@ -59,7 +59,7 @@
|
|
59
59
|
|
60
60
|
上記で、選ばれたファイルの内容を受け取って、結果を返す `assort` という関数を呼んでいます。関数 `assort` は、以下のファイル `assort.js` の最後にあります。`assort.js` の中で、配列から重複を除くための処理に lodash の [uniqBy](https://lodash.com/docs/4.17.15#uniqBy) を使っています。
|
61
61
|
|
62
|
-
### assort.js
|
62
|
+
### assort.js
|
63
63
|
```javascript
|
64
64
|
const isMinimal = a => (
|
65
65
|
Array.isArray(a) &&
|
12
テキスト修正
answer
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
とのことですが、
|
6
6
|
> 多重
|
7
7
|
|
8
|
-
とは、どの程度、配列が入れ子になっているのかがご質問からは読み取れませんでしたので、入れ子の深さに
|
8
|
+
とは、どの程度、配列が入れ子になっているのかがご質問からは読み取れませんでしたので、入れ子の深さに関わらず、長さが2で要素が文字列か数字であるような
|
9
9
|
|
10
10
|
> 一番小さい配列
|
11
11
|
|
11
テキスト修正
answer
CHANGED
@@ -203,10 +203,14 @@
|
|
203
203
|
}
|
204
204
|
```
|
205
205
|
|
206
|
-
|
206
|
+
上記の回答に書いたコードでは、
|
207
207
|
|
208
|
-
|
208
|
+
- `getMinimals` が再帰関数になっているので、想定していない入力があると無限ループになる恐れがありますので、実用化するには何らかの対策が必要かもしれません。
|
209
209
|
|
210
|
+
- 一度、すべての minimal な配列を拾い出してから分類しているので、やや冗長なコードになっていると思います。
|
211
|
+
|
212
|
+
といった問題点がありますが、各論はさておき、上記のコードで示したいことは、
|
213
|
+
|
210
214
|
1. 入力されたテキストを加工してJSONの配列にする。
|
211
215
|
2. JSONをパースして、JavaScript の配列を得る。
|
212
216
|
3. 得られた配列の要素から、minimalな配列を拾い出すために再帰を使うことができる。
|
@@ -214,9 +218,4 @@
|
|
214
218
|
|
215
219
|
というステップを踏むのはいかがでしょうか?という考え方です。
|
216
220
|
|
217
|
-
以上、参考になれば幸いです。
|
221
|
+
以上、参考になれば幸いです。
|
218
|
-
|
219
|
-
|
220
|
-
#### 追記
|
221
|
-
|
222
|
-
上記の回答に書いたコードは、やや冗長なコードになっていると思います。リファクタできたら、またのちほど追記します。
|
10
テキスト修正
answer
CHANGED
@@ -209,7 +209,7 @@
|
|
209
209
|
|
210
210
|
1. 入力されたテキストを加工してJSONの配列にする。
|
211
211
|
2. JSONをパースして、JavaScript の配列を得る。
|
212
|
-
3. 得られた配列から、minimalな配列を拾い出すために再帰を使うことができる。
|
212
|
+
3. 得られた配列の要素から、minimalな配列を拾い出すために再帰を使うことができる。
|
213
213
|
4. 拾い出した minimalな配列 を分類する。
|
214
214
|
|
215
215
|
というステップを踏むのはいかがでしょうか?という考え方です。
|
9
テキスト修正
answer
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
> 一番小さい配列
|
14
14
|
|
15
15
|
|
16
|
-
のことを `minimal` な配列と呼び、 minimal な配列の先頭要素を `head`, 2番目の要素を `tail` と
|
16
|
+
のことを `minimal` な配列と呼び、 minimal な配列の先頭要素を `head`, 2番目の要素を `tail` と呼ぶことにして、これらを変数名やプロパティ名、関数名に使っています。
|
17
17
|
|
18
18
|
### index.html:
|
19
19
|
```html
|
8
テキスト修正
answer
CHANGED
@@ -57,7 +57,7 @@
|
|
57
57
|
</html>
|
58
58
|
```
|
59
59
|
|
60
|
-
上記で、選ばれたファイルの内容を受け取って、結果を返す `assort` という関数を呼んでいます。
|
60
|
+
上記で、選ばれたファイルの内容を受け取って、結果を返す `assort` という関数を呼んでいます。関数 `assort` は、以下のファイル `assort.js` の最後にあります。`assort.js` の中で、配列から重複を除くための処理に lodash の [uniqBy](https://lodash.com/docs/4.17.15#uniqBy) を使っています。
|
61
61
|
|
62
62
|
### assort.js:
|
63
63
|
```javascript
|
7
テキスト修正
answer
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
とのことですが、
|
6
6
|
> 多重
|
7
7
|
|
8
|
-
と
|
8
|
+
とは、どの程度、配列が入れ子になっているのかがご質問からは読み取れませんでしたので、入れ子の深さに限らず、長さが2で要素が文字列か数字であるような
|
9
9
|
|
10
10
|
> 一番小さい配列
|
11
11
|
|
@@ -13,7 +13,7 @@
|
|
13
13
|
> 一番小さい配列
|
14
14
|
|
15
15
|
|
16
|
-
のことを `minimal` な配列と呼び、 minimal な配列の先頭要素を `head`, 2番目の要素を `tail` ということにして、変数名や関数名に使っています。
|
16
|
+
のことを `minimal` な配列と呼び、 minimal な配列の先頭要素を `head`, 2番目の要素を `tail` ということにして、これらを変数名やプロパティ名、関数名に使っています。
|
17
17
|
|
18
18
|
### index.html:
|
19
19
|
```html
|
6
テキスト修正
answer
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
とのことですが、
|
6
6
|
> 多重
|
7
7
|
|
8
|
-
というのが、どの程度入れ子になっているのかが、ご質問からは
|
8
|
+
というのが、どの程度入れ子になっているのかが、ご質問からは読み取れませんでしたので、深さに限らず、長さが2で要素が文字列か数字であるような
|
9
9
|
|
10
10
|
> 一番小さい配列
|
11
11
|
|
5
テキスト修正
answer
CHANGED
@@ -114,9 +114,7 @@
|
|
114
114
|
text = text.replace(/^(.+)=/, '')
|
115
115
|
|
116
116
|
// 配列要素として出現する変数名をダブルコーテーションで囲む。
|
117
|
-
const jsonStr = text.replace(/([a-z][a-z0-9]*)/g, name =>
|
117
|
+
const jsonStr = text.replace(/([a-z][a-z0-9]*)/g, name => `"${name}"`);
|
118
|
-
`"${name}"`
|
119
|
-
);
|
120
118
|
|
121
119
|
// JSON文字列としてパース
|
122
120
|
const data = JSON.parse(jsonStr);
|
4
テキスト修正
answer
CHANGED
@@ -121,7 +121,7 @@
|
|
121
121
|
// JSON文字列としてパース
|
122
122
|
const data = JSON.parse(jsonStr);
|
123
123
|
|
124
|
-
// 最小配列(要素の数が2個で、要素が数
|
124
|
+
// 最小配列(要素の数が2個で、要素が数または文字列の配列) を収集
|
125
125
|
const minimals = _.uniqBy(getMinimals(data), e => e.join(','))
|
126
126
|
|
127
127
|
// 分類キーを作成
|
3
テキスト修正
answer
CHANGED
@@ -211,7 +211,7 @@
|
|
211
211
|
|
212
212
|
1. 入力されたテキストを加工してJSONの配列にする。
|
213
213
|
2. JSONをパースして、JavaScript の配列を得る。
|
214
|
-
3. 得られた配列から、minimalな配列を拾い出すために再帰を使う。
|
214
|
+
3. 得られた配列から、minimalな配列を拾い出すために再帰を使うことができる。
|
215
215
|
4. 拾い出した minimalな配列 を分類する。
|
216
216
|
|
217
217
|
というステップを踏むのはいかがでしょうか?という考え方です。
|
2
テキスト修正
answer
CHANGED
@@ -57,7 +57,7 @@
|
|
57
57
|
</html>
|
58
58
|
```
|
59
59
|
|
60
|
-
上記で、選ばれたファイルの内容を受け取って、結果を返す `assort` という関数を呼んでいます。これは以下のようなものです。(関数 assort は、以下のファイル assort.js の最後にあります。)
|
60
|
+
上記で、選ばれたファイルの内容を受け取って、結果を返す `assort` という関数を呼んでいます。これは以下のようなものです。(関数 assort は、以下のファイル assort.js の最後にあります。また、配列から重複を除くための処理に lodash の [uniqBy](https://lodash.com/docs/4.17.15#uniqBy) を使っています。)
|
61
61
|
|
62
62
|
### assort.js:
|
63
63
|
```javascript
|
@@ -221,4 +221,4 @@
|
|
221
221
|
|
222
222
|
#### 追記
|
223
223
|
|
224
|
-
上記の回答に書いたコードは、やや冗長なコードになっていると思います
|
224
|
+
上記の回答に書いたコードは、やや冗長なコードになっていると思います。リファクタできたら、またのちほど追記します。
|
1
テキスト修正
answer
CHANGED
@@ -216,4 +216,9 @@
|
|
216
216
|
|
217
217
|
というステップを踏むのはいかがでしょうか?という考え方です。
|
218
218
|
|
219
|
-
以上、参考になれば幸いです。
|
219
|
+
以上、参考になれば幸いです。
|
220
|
+
|
221
|
+
|
222
|
+
#### 追記
|
223
|
+
|
224
|
+
上記の回答に書いたコードは、やや冗長なコードになっていると思いますので、リファクタできたら、またのちほど追記します。
|