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

回答編集履歴

21

テキスト修正

2020/01/11 18:28

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,10 @@
1
1
  こんにちは。
2
2
 
3
- 回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点から考えました。ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、何らかの統計ライブラリを使えば良さそうです。探してみると、 [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) があります。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
3
+ 回答するにあたって、
4
+
5
+ - 「配列から最頻出の要素を見つけ出す」という汎用的なコードは、既にどこかで作られていると思われるので、これを**いかにして自作しないで済ませられるか?**
6
+
7
+ という方針で考えました。ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、何らかの統計ライブラリを使えば良さそうです。探してみると、 [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) が見つかります。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
4
8
  - `modeOfChars(charAry)` 
5
9
 
6
10
  を作成しました。

20

テキスト修正

2020/01/11 18:28

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,9 +1,9 @@
1
1
  こんにちは。
2
2
 
3
- 回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点から考えま。ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、何らかの統計ライブラリを使えば良さそうです。探してみると、 [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) がありましたので、これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
3
+ 回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点から考えました。ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、何らかの統計ライブラリを使えば良さそうです。探してみると、 [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) があります。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
4
4
  - `modeOfChars(charAry)` 
5
5
 
6
- を作成しました。以下、そのコードです。
6
+ を作成しました。
7
7
  ```javascript
8
8
  const modeOfChars = (charAry = []) => {
9
9
  if (!charAry.length) return [];

19

テキスト修正

2020/01/11 18:20

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  こんにちは。
2
2
 
3
- 回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点考えてみると、ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、何らかの統計ライブラリを使えば良さそうです。探してみると、 [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) がありましたので、これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
3
+ 回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点から考えます。ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、何らかの統計ライブラリを使えば良さそうです。探してみると、 [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) がありましたので、これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
4
4
  - `modeOfChars(charAry)` 
5
5
 
6
6
  を作成しました。以下、そのコードです。

18

テキスト修正

2020/01/11 18:14

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  こんにちは。
2
2
 
3
- 回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点で考えてみると、ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用すること思いつきす。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
3
+ 回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点で考えてみると、ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、何らかの統計ライブラリを使えば良さそうです。探してみると、 [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) がありしたので、これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
4
4
  - `modeOfChars(charAry)` 
5
5
 
6
6
  を作成しました。以下、そのコードです。

17

テキスト修正

2020/01/11 18:05

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  こんにちは。
2
2
 
3
- 回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、いかにして自作しないで済ませるか?という観点で考えてみると、ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用することが思いつきます。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
3
+ 回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点で考えてみると、ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用することが思いつきます。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
4
4
  - `modeOfChars(charAry)` 
5
5
 
6
6
  を作成しました。以下、そのコードです。

16

テキスト修正

2020/01/11 17:59

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,8 +1,6 @@
1
1
  こんにちは。
2
2
 
3
- ご質問に回答するにあたって、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という方針検討しした
4
-
5
- ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用します。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
3
+ 回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、いかにして自作しないで済ませるか?という観点考えてみると、ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用することが思いつきこれを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
6
4
  - `modeOfChars(charAry)` 
7
5
 
8
6
  を作成しました。以下、そのコードです。

15

テキスト修正

2020/01/11 17:56

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,36 +1,11 @@
1
1
  こんにちは。
2
- [lodash](https://lodash.com/) を使いました。
3
2
 
4
- ```javascript
5
- const mostFrequentStr = _.maxBy(_.toPairs(_.countBy(array)), ([str, count]) => count).shift();
3
+ ご質問に回答するにあたって、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という方針で検討しました。
6
4
 
7
- ```
8
- - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrybj?editors=0012](https://codepen.io/jun68ykt/pen/eYmrybj?editors=0012)
9
-
10
- ### 追記1
11
-
12
- 上記と同じく、lodashを使いますが、最頻出の要素が複数ある場合に、それらを配列にして返すようにしました。
13
-
14
- ```javascript
15
- const counters = _.groupBy(_.toPairs(_.countBy(array)), ([str, count]) => count);
16
-
17
- const maxFrequency = Math.max(...Object.keys(counters));
18
-
19
- const mostFrequentStrs = counters[maxFrequency].map(([str, _]) => str);
20
- ```
21
- - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012](https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012)
22
-
23
- ### 追記2
24
-
25
- もうひとつ別解を挙げます。
26
-
27
- ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用します。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
5
+ ご質問の本題は、統計用語の[最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用します。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
28
6
  - `modeOfChars(charAry)` 
29
7
 
30
8
  を作成しました。以下、そのコードです。
31
-
32
-
33
-
34
9
  ```javascript
35
10
  const modeOfChars = (charAry = []) => {
36
11
  if (!charAry.length) return [];

14

テキスト修正

2020/01/11 17:45

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -51,4 +51,4 @@
51
51
  - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012](https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012)
52
52
 
53
53
 
54
- jStatを使うために、所与の文字列の配列を数値の配列に変換する必要がありますので、上記の `modeOfChars(charAry)` では、所与の配列`charAry` の要素がアルファベット一文字であることを前提として、各文字のASCIIコードの配列`intAry`を得て、それに対してモードを取得し、再度、一文字の文字列に戻すようにします
54
+ jStatを使うために、所与の文字列の配列を数値の配列に変換する必要がありますので、上記の `modeOfChars(charAry)` では、所与の配列`charAry` の要素がアルファベット一文字であることを前提として、各文字のASCIIコードの配列`intAry`を得て、それに対してモードを取得し、再度、一文字の文字列に戻しています

13

テキスト修正

2020/01/11 17:13

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -27,10 +27,10 @@
27
27
  ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用します。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
28
28
  - `modeOfChars(charAry)` 
29
29
 
30
- を作成します。
30
+ を作成しました。以下、そのコードです。
31
31
 
32
- jStatを使うために、所与の文字列の配列を数値の配列に変換する必要がありますので、所与の配列要素がアルファベット一文字であることを前提として、各文字のASCIIコードの配列を得て、それに対してモードを取得し、再度、一文字の文字列に戻すようにします。以下、関数`modeOfChars` のコードです。
33
32
 
33
+
34
34
  ```javascript
35
35
  const modeOfChars = (charAry = []) => {
36
36
  if (!charAry.length) return [];
@@ -48,4 +48,7 @@
48
48
  console.log(modeOfChars([])); // => []
49
49
  console.log(modeOfChars()); // => []
50
50
  ```
51
- - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012](https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012)
51
+ - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012](https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012)
52
+
53
+
54
+ jStatを使うために、所与の文字列の配列を数値の配列に変換する必要がありますので、上記の `modeOfChars(charAry)` では、所与の配列`charAry` の要素がアルファベット一文字であることを前提として、各文字のASCIIコードの配列`intAry`を得て、それに対してモードを取得し、再度、一文字の文字列に戻すようにします

12

テキスト修正

2020/01/11 17:12

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -40,5 +40,12 @@
40
40
 
41
41
  return mode.length ? mode.map(String.fromCharCode) : [String.fromCharCode(mode)];
42
42
  }
43
+
44
+
45
+ // 以下、実行例
46
+ console.log(modeOfChars(["a", "b", "c", "d", "e", "e", "b", "e", "c", "a", "d"])); // => ["e"]
47
+ console.log(modeOfChars(["a", "b", "c", "d", "e", "e", "b", "e", "c", "b", "d"])); // => ["b", "e"]
48
+ console.log(modeOfChars([])); // => []
49
+ console.log(modeOfChars()); // => []
43
50
  ```
44
51
  - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012](https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012)

11

テキスト修正

2020/01/11 16:53

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  もうひとつ別解を挙げます。
26
26
 
27
- ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って、引数として、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
27
+ ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を利用します。これを使って、一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を返す関数
28
28
  - `modeOfChars(charAry)` 
29
29
 
30
30
  を作成します。

10

テキスト修正

2020/01/11 16:40

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -24,8 +24,13 @@
24
24
 
25
25
  もうひとつ別解を挙げます。
26
26
 
27
- ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得るこができます。ただjStatを使うために所与の文字列の配列数値の配列に変換する必要があますので所与配列要素がアルファベット一文字であることを前提として、各文字ASCIIコードの配列を得て、それに対してモードを取得し、再度、一文字の文字列に戻しま
27
+ ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って、引数とし一文字の文字列を要素とする配列 `charAry` を受け取り、最頻出の要素の配列を関数
28
+ - `modeOfChars(charAry)` 
28
29
 
30
+ を作成します。
31
+
32
+ jStatを使うために、所与の文字列の配列を数値の配列に変換する必要がありますので、所与の配列要素がアルファベット一文字であることを前提として、各文字のASCIIコードの配列を得て、それに対してモードを取得し、再度、一文字の文字列に戻すようにします。以下、関数`modeOfChars` のコードです。
33
+
29
34
  ```javascript
30
35
  const modeOfChars = (charAry = []) => {
31
36
  if (!charAry.length) return [];

9

テキスト修正

2020/01/11 16:37

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  ### 追記1
11
11
 
12
- 上記と同じく、lodashを使いますが、最頻出の要素が複数あり得る場合に、それらを配列にして返すようにしました。
12
+ 上記と同じく、lodashを使いますが、最頻出の要素が複数ある場合に、それらを配列にして返すようにしました。
13
13
 
14
14
  ```javascript
15
15
  const counters = _.groupBy(_.toPairs(_.countBy(array)), ([str, count]) => count);

8

テキスト修正

2020/01/11 16:28

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -27,17 +27,13 @@
27
27
  ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。ただしjStatを使うために、所与の文字列の配列を数値の配列に変換する必要がありますので、所与の配列要素がアルファベット一文字であることを前提として、各文字のASCIIコードの配列を得て、それに対してモードを取得し、再度、一文字の文字列に戻します。
28
28
 
29
29
  ```javascript
30
- const modeOf = (charAry) => {
30
+ const modeOfChars = (charAry = []) => {
31
+ if (!charAry.length) return [];
32
+
31
33
  const intAry = charAry.map(ch => ch.charCodeAt(0));
32
34
  const mode = jStat.mode(intAry);
33
35
 
34
36
  return mode.length ? mode.map(String.fromCharCode) : [String.fromCharCode(mode)];
35
37
  }
36
-
37
-
38
- console.log(modeOf(["a", "b", "c", "d", "e", "e", "b", "e", "c", "a", "d"])); // => ["e"]
39
-
40
- console.log(modeOf(["a", "b", "c", "d", "e", "e", "b", "e", "c", "b", "d"])); // => ["b, e"]
41
-
42
38
  ```
43
39
  - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012](https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012)

7

テキスト修正

2020/01/11 16:20

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -24,14 +24,14 @@
24
24
 
25
25
  もうひとつ別解を挙げます。
26
26
 
27
- ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を数の配列に変換してからモードを取得し、再度文字列に戻します。
27
+ ご質問の本題を統計用語でいうと、 [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。ただしjStatを使うために、所与の文字列の配列を数の配列に変換する必要がありますので、所与の配列要素がアルファベット一文字であることを前提として、各文字のASCIIコードの配列を得て、それに対してモードを取得し、再度、一文字の文字列に戻します。
28
28
 
29
29
  ```javascript
30
- const modeOf = (strAry) => {
30
+ const modeOf = (charAry) => {
31
- const intAry = strAry.map((str, _, self) => self.findIndex(e => e === str));
31
+ const intAry = charAry.map(ch => ch.charCodeAt(0));
32
32
  const mode = jStat.mode(intAry);
33
33
 
34
- return mode.length ? mode.map(i => strAry[i]) : [strAry[mode]];
34
+ return mode.length ? mode.map(String.fromCharCode) : [String.fromCharCode(mode)];
35
35
  }
36
36
 
37
37
 
@@ -40,4 +40,4 @@
40
40
  console.log(modeOf(["a", "b", "c", "d", "e", "e", "b", "e", "c", "b", "d"])); // => ["b, e"]
41
41
 
42
42
  ```
43
- - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/BayxYwJ?editors=0012](https://codepen.io/jun68ykt/pen/BayxYwJ?editors=0012)
43
+ - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012](https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012)

6

テキスト修正

2020/01/11 16:14

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -9,7 +9,7 @@
9
9
 
10
10
  ### 追記1
11
11
 
12
- 最頻出の要素が複数あり得る場合に、それらを配列にして返すようにしたコードが以下です
12
+ 上記と同じく、lodashを使いますが、最頻出の要素が複数あり得る場合に、それらを配列にして返すようにしました。
13
13
 
14
14
  ```javascript
15
15
  const counters = _.groupBy(_.toPairs(_.countBy(array)), ([str, count]) => count);

5

テキスト修正

2020/01/11 15:48

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  もうひとつ別解を挙げます。
26
26
 
27
- ご質問の本題は、統計的にいうと [最頻値(mode)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を整数の配列に変換してからモードを取得し、再度文字列に戻します。
27
+ ご質問の本題統計用語でいうと [最頻値(モード)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を整数の配列に変換してからモードを取得し、再度文字列に戻します。
28
28
 
29
29
  ```javascript
30
30
  const modeOf = (strAry) => {

4

テキスト修正

2020/01/11 15:45

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -24,12 +24,12 @@
24
24
 
25
25
  もうひとつ別解を挙げます。
26
26
 
27
- ご質問の本題は、統計的にいうと [最頻値(mode)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を数の配列に変換してからモードを取得し、再度文字列に戻します。
27
+ ご質問の本題は、統計的にいうと [最頻値(mode)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を数の配列に変換してからモードを取得し、再度文字列に戻します。
28
28
 
29
29
  ```javascript
30
30
  const modeOf = (strAry) => {
31
- const indexAry = strAry.map((str, _, self) => self.findIndex(e => e === str));
31
+ const intAry = strAry.map((str, _, self) => self.findIndex(e => e === str));
32
- const mode = jStat.mode(indexAry);
32
+ const mode = jStat.mode(intAry);
33
33
 
34
34
  return mode.length ? mode.map(i => strAry[i]) : [strAry[mode]];
35
35
  }

3

テキスト修正

2020/01/11 15:29

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
  もうひとつ別解を挙げます。
26
26
 
27
- ご質問の本題は、統計的にいうと[最頻値(mode)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることです。ですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を数値の配列に変換してからモードを取得し、再度文字列に戻します。
27
+ ご質問の本題は、統計的にいうと [最頻値(mode)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を数値の配列に変換してからモードを取得し、再度文字列に戻します。
28
28
 
29
29
  ```javascript
30
30
  const modeOf = (strAry) => {

2

テキスト修正

2020/01/11 15:00

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -7,7 +7,7 @@
7
7
  ```
8
8
  - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrybj?editors=0012](https://codepen.io/jun68ykt/pen/eYmrybj?editors=0012)
9
9
 
10
- ### 追記
10
+ ### 追記1
11
11
 
12
12
  最頻出の要素が複数あり得る場合に、それらを配列にして返すようにしたコードが以下です。
13
13
 
@@ -18,4 +18,26 @@
18
18
 
19
19
  const mostFrequentStrs = counters[maxFrequency].map(([str, _]) => str);
20
20
  ```
21
- - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012](https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012)
21
+ - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012](https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012)
22
+
23
+ ### 追記2
24
+
25
+ もうひとつ別解を挙げます。
26
+
27
+ ご質問の本題は、統計的にいうと、[最頻値(mode)](https://ja.wikipedia.org/wiki/%E6%9C%80%E9%A0%BB%E5%80%A4) を求めることです。ですので、統計ライブラリ [jStat](https://github.com/jstat/jstat) のメソッド [mode()](https://jstat.github.io/all.html#mode) を使って得ることができます。jStatを使うために、所与の文字列の配列を数値の配列に変換してからモードを取得し、再度文字列に戻します。
28
+
29
+ ```javascript
30
+ const modeOf = (strAry) => {
31
+ const indexAry = strAry.map((str, _, self) => self.findIndex(e => e === str));
32
+ const mode = jStat.mode(indexAry);
33
+
34
+ return mode.length ? mode.map(i => strAry[i]) : [strAry[mode]];
35
+ }
36
+
37
+
38
+ console.log(modeOf(["a", "b", "c", "d", "e", "e", "b", "e", "c", "a", "d"])); // => ["e"]
39
+
40
+ console.log(modeOf(["a", "b", "c", "d", "e", "e", "b", "e", "c", "b", "d"])); // => ["b, e"]
41
+
42
+ ```
43
+ - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/BayxYwJ?editors=0012](https://codepen.io/jun68ykt/pen/BayxYwJ?editors=0012)

1

テキスト修正

2020/01/11 14:47

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -5,4 +5,17 @@
5
5
  const mostFrequentStr = _.maxBy(_.toPairs(_.countBy(array)), ([str, count]) => count).shift();
6
6
 
7
7
  ```
8
- - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrybj?editors=0012](https://codepen.io/jun68ykt/pen/eYmrybj?editors=0012)
8
+ - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrybj?editors=0012](https://codepen.io/jun68ykt/pen/eYmrybj?editors=0012)
9
+
10
+ ### 追記
11
+
12
+ 最頻出の要素が複数あり得る場合に、それらを配列にして返すようにしたコードが以下です。
13
+
14
+ ```javascript
15
+ const counters = _.groupBy(_.toPairs(_.countBy(array)), ([str, count]) => count);
16
+
17
+ const maxFrequency = Math.max(...Object.keys(counters));
18
+
19
+ const mostFrequentStrs = counters[maxFrequency].map(([str, _]) => str);
20
+ ```
21
+ - **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012](https://codepen.io/jun68ykt/pen/oNgdEXg?editors=0012)