回答編集履歴
21
テキスト修正
answer
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
こんにちは。
|
2
2
|
|
3
|
-
回答するにあたって、
|
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
テキスト修正
answer
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
こんにちは。
|
2
2
|
|
3
|
-
回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点から考えま
|
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
テキスト修正
answer
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
こんにちは。
|
2
2
|
|
3
|
-
回答するにあたって、[怠慢](https://tech.nikkeibp.co.jp/it/article/Watcher/20061005/250057/)な方針で検討しました。すなわち、「配列から最頻出の要素を見つけ出す」という汎用的なロジックを、**いかにして自作しないで済ませるか?**という観点
|
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
テキスト修正
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)
|
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
テキスト修正
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
テキスト修正
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
テキスト修正
answer
CHANGED
@@ -1,36 +1,11 @@
|
|
1
1
|
こんにちは。
|
2
|
-
[lodash](https://lodash.com/) を使いました。
|
3
2
|
|
4
|
-
```javascript
|
5
|
-
|
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
テキスト修正
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
テキスト修正
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
テキスト修正
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
テキスト修正
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) を使って、
|
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
テキスト修正
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) を使って
|
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
テキスト修正
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
テキスト修正
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
|
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
テキスト修正
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 = (
|
30
|
+
const modeOf = (charAry) => {
|
31
|
-
const intAry =
|
31
|
+
const intAry = charAry.map(ch => ch.charCodeAt(0));
|
32
32
|
const mode = jStat.mode(intAry);
|
33
33
|
|
34
|
-
return mode.length ? mode.map(
|
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/
|
43
|
+
- **動作確認用CodePen:** [https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012](https://codepen.io/jun68ykt/pen/eYmrMXW?editors=0012)
|
6
テキスト修正
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
テキスト修正
answer
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
もうひとつ別解を挙げます。
|
26
26
|
|
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を使うために、所与の文字列の配列を整数の配列に変換してからモードを取得し、再度文字列に戻します。
|
28
28
|
|
29
29
|
```javascript
|
30
30
|
const modeOf = (strAry) => {
|
4
テキスト修正
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
|
31
|
+
const intAry = strAry.map((str, _, self) => self.findIndex(e => e === str));
|
32
|
-
const mode = jStat.mode(
|
32
|
+
const mode = jStat.mode(intAry);
|
33
33
|
|
34
34
|
return mode.length ? mode.map(i => strAry[i]) : [strAry[mode]];
|
35
35
|
}
|
3
テキスト修正
answer
CHANGED
@@ -24,7 +24,7 @@
|
|
24
24
|
|
25
25
|
もうひとつ別解を挙げます。
|
26
26
|
|
27
|
-
ご質問の本題は、統計的にいうと
|
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
テキスト修正
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
テキスト修正
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)
|