JavaScriptで配列内の最頻値とその出現回数を求める方法
JavaScriptでは、リテラル(数値や文字列など)を含む配列を受け取り、その中で最も多く登場する要素(最頻値)と、それが何回繰り返されているかを出力する関数を書くことができます。
実装の考え方
この処理は、配列の reduce() メソッドを使うことで効率的に実装できます。各要素の出現回数をオブジェクトに記録しながら走査し、同時に最大出現回数を持つ要素を追跡します。同じ出現回数の要素が複数ある場合は、それらすべてを配列に格納して返すようにしています。
コード例
実際のコードは以下のとおりです。
const arr = ['13', '4', '1', '1', '4', '2', '3', '4', '4', '1', '2', '4', '9', '3'];
const findFrequency = (arr = []) => {
const count = {};
const max = arr.reduce((acc, val, ind) => {
count[val] = (count[val] || 0) + 1;
if (!ind || count[val] > count[acc[0]]) {
return [val];
};
if (val !== acc[0] && count[val] === count[acc[0]]) {
acc.push(val);
};
return acc;
}, undefined);
return {
max, count
};
}
console.log(findFrequency(arr));実行結果
コンソールに出力される結果は以下のようになります。
{
max: [ '4' ],
count: { '1': 3, '2': 2, '3': 2, '4': 5, '9': 1, '13': 1 }
}解説
この例では、文字 '4' が合計5回登場しており、他のどの要素よりも多いため、max には ['4'] が格納されます。count オブジェクトには、配列内の各要素とその出現回数がまとめて記録されています。
仮に複数の要素が同じ最大回数で登場した場合(例えば '4' と '1' がどちらも5回ずつだった場合)、max 配列には両方の要素が含まれるため、同率の最頻値にも柔軟に対応できる点がこの関数の特徴です。
-
【JavaScript】配列内で最も頻出する単語を上位N件抽出する方法
問題概要英小文字のみで構成された文字列の配列 arr を第一引数として受け取り、数値 num(num は配列の長さより小さい値)を第二引数として受け取る JavaScript 関数を作成します。この関数は、配列 arr 内で最も頻出する要素を上位 num 件返す必要があります。結果は出現回数が多い順に並べます。また、出現回数が同じ単語が複数ある場合は、辞書順(アルファベット順)で先に来る単語を優先して並べます。入力例const arr = [the, day, is, sunny, the, the, the, sunny, is, is]; const num = 4;出力例const ou
-
C#で組み込み関数を使わずに配列内の欠損している数と重複している数を見つける方法
欠損している数を見つける方法まず、元の配列よりも1つ大きいサイズのbool型配列を新しく作成します。次に、元の配列全体を走査し、各数値が出現したら新しく作成した配列の対応するインデックスを true に設定していきます。すべての走査が完了した後、この配列を先頭から再度走査し、最初に false となっているインデックスが欠損している数となります。重複している数を見つける方法同様に、int型のカウント用配列を別途用意します。各数値の出現状況を記録し、同じ数が2回目に出現した時点でその位置の値を2に更新します。走査後、最初に値が2になっているインデックスが、重複している数を示します。サンプルコード