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

回答編集履歴

15

テキスト修正

2019/08/03 07:08

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -5,15 +5,15 @@
5
5
  とのことですが、
6
6
  > 多重
7
7
 
8
- とは、どの程度、配列が入れ子になっているのかご質問からは読み取れませんでしたので、入れ子深さ関わらず、長さが2で要素が文字列か数字であるような
8
+ とは、具体的にはどのような階層構造の中に目的の配列がるのかについて、ご質問からは読み取れませんでしたので、全体配列の中のどこあっても、長さが2で要素が文字列か数字であるような
9
9
 
10
10
  > 一番小さい配列
11
11
 
12
- を拾い出すプログラムを作って解決するコードを書いてみま。なお、以下では、この
12
+ を拾い出すコードを回答ます。なお、以下では、この
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

14

テキスト修正

2019/08/03 07:08

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -57,7 +57,7 @@
57
57
  </html>
58
58
  ```
59
59
 
60
- 上記で、選ばれたファイルの内容を受け取って、結果を返す `assort` という関数を呼んでい。関数 `assort` は、以下のファイル `assort.js` の最後にあります。`assort.js` の中で、配列から重複を除くための処理に lodash の [uniqBy](https://lodash.com/docs/4.17.15#uniqBy) を使っています。
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

テキスト修正

2019/08/03 04:02

投稿

jun68ykt
jun68ykt

スコア9058

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

テキスト修正

2019/08/02 11:03

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  とのことですが、
6
6
  > 多重
7
7
 
8
- とは、どの程度、配列が入れ子になっているのかがご質問からは読み取れませんでしたので、入れ子の深さにらず、長さが2で要素が文字列か数字であるような
8
+ とは、どの程度、配列が入れ子になっているのかがご質問からは読み取れませんでしたので、入れ子の深さに関わらず、長さが2で要素が文字列か数字であるような
9
9
 
10
10
  > 一番小さい配列
11
11
 

11

テキスト修正

2019/08/02 04:21

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -203,10 +203,14 @@
203
203
  }
204
204
  ```
205
205
 
206
- `getMinimals` が再帰関数なってるので、想定していない入力があると無限ルプになる恐れがありますの、実用化するに何らかの対策が必要かもしれません。
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

テキスト修正

2019/08/02 04:20

投稿

jun68ykt
jun68ykt

スコア9058

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

テキスト修正

2019/08/02 04:02

投稿

jun68ykt
jun68ykt

スコア9058

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

テキスト修正

2019/08/02 03:52

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -57,7 +57,7 @@
57
57
  </html>
58
58
  ```
59
59
 
60
- 上記で、選ばれたファイルの内容を受け取って、結果を返す `assort` という関数を呼んでいます。これは以下のようなものです。(関数 assort は、以下のファイル assort.js の最後にあります。また、配列から重複を除くための処理に lodash の [uniqBy](https://lodash.com/docs/4.17.15#uniqBy) を使っています。
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

テキスト修正

2019/08/02 03:07

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  とのことですが、
6
6
  > 多重
7
7
 
8
- いうのが、どの程度入れ子になっているのかがご質問からは読み取れませんでしたので、深さに限らず、長さが2で要素が文字列か数字であるような
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

テキスト修正

2019/08/02 02:58

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  とのことですが、
6
6
  > 多重
7
7
 
8
- というのが、どの程度入れ子になっているのかが、ご質問からは不明確だったので、深さに限らず、長さが2で要素が文字列か数字であるような
8
+ というのが、どの程度入れ子になっているのかが、ご質問からは読み取れませんでしたので、深さに限らず、長さが2で要素が文字列か数字であるような
9
9
 
10
10
  > 一番小さい配列
11
11
 

5

テキスト修正

2019/08/02 02:21

投稿

jun68ykt
jun68ykt

スコア9058

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

テキスト修正

2019/08/02 02:18

投稿

jun68ykt
jun68ykt

スコア9058

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

テキスト修正

2019/08/02 02:17

投稿

jun68ykt
jun68ykt

スコア9058

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

テキスト修正

2019/08/02 02:13

投稿

jun68ykt
jun68ykt

スコア9058

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

テキスト修正

2019/08/02 02:08

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -216,4 +216,9 @@
216
216
 
217
217
  というステップを踏むのはいかがでしょうか?という考え方です。
218
218
 
219
- 以上、参考になれば幸いです。
219
+ 以上、参考になれば幸いです。
220
+
221
+
222
+ #### 追記
223
+
224
+ 上記の回答に書いたコードは、やや冗長なコードになっていると思いますので、リファクタできたら、またのちほど追記します。