JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで配列内の最頻値(最も共通する要素)を取得する方法

繰り返しの値を含むリテラルの配列を受け取り、その中で最も多く出現する要素(最頻値)を配列として返すJavaScript関数を作成する必要があります。2つ以上の要素が同じ回数だけ最も多く現れる場合は、該当するすべての要素を結果の配列に含めなければなりません。

実装コード例

この処理を実装したコードは以下のとおりです。

const arr1 = ["a", "c", "a", "b", "d", "e", "f"];
const arr2 = ["a", "c", "a", "c", "d", "e", "f"];
const getMostCommon = arr => {
    const count = {};
    let res = [];
    arr.forEach(el => {
        count[el] = (count[el] || 0) + 1;
    });
    res = Object.keys(count).reduce((acc, val, ind) => {
        if (!ind || count[val] > count[acc[0]]) {
            return [val];
        };
        if (count[val] === count[acc[0]]) {
            acc.push(val);
        };
        return acc;
    }, []);
    return res;
}
console.log(getMostCommon(arr1));
console.log(getMostCommon(arr2));

実行結果

コンソールには次のように出力されます。

[ 'a' ]
[ 'a', 'c' ]

コードの解説

この関数は、大きく分けて2つのステップで動作します。

ステップ1:出現回数の集計
まず forEach ループを使い、各要素の出現回数を count オブジェクトに記録します。count[el] || 0 という記述により、まだキーが存在しない場合は 0 からカウントを開始できるため、簡潔に書くことができます。

ステップ2:最頻値の抽出
次に Object.keys() で取得したすべてのキーに対して reduce を実行し、出現回数が最大の要素だけを配列に残します。現在の要素のカウント数が既存の最大値より大きければ配列を新しいものに置き換え、等しければ既存の配列に追加します。これにより、出現回数が同率の複数要素にも柔軟に対応できます。

  1. JavaScript配列から一意の値(重複なし)を取得する方法

    JavaScriptの配列に含まれる重複した値を取り除き、一意の値(ユニークな値)だけを取得したい場合は、Setオブジェクトを使うのが最もシンプルで効率的な方法です。 Setは同じ値を1つしか格納できないデータ構造のため、配列をnew Set()に渡すだけで自動的に重複が排除されます。その後、スプレッド構文([...set])を使えば、簡単に元の配列形式へ戻すことができます。 サンプルコード 以下は、JavaScriptの配列からすべての一意の値を取得する実際のコード例です。 <!DOCTYPE html> <html lang=ja> <head> <

  2. JavaScriptでオブジェクトの値を取得する方法:Object.values()と_.values()の違いを解説

    JavaScriptにはObject.values()など、オブジェクトの値を取得するためのメソッドがいくつか用意されています。しかし、これらの標準メソッドでは値を取り出すまでの手順がやや長くなりがちです。そこで便利なのが、JavaScriptライブラリ「Underscore.js」が提供する_.values()メソッドです。このメソッドを使えば、forループを記述することなく、オブジェクトの値を直接取得できます。 Object.values()を使った例 まずは標準メソッドであるObject.values()を使った例です。このメソッドで取得した値を順番に表示するには、for...ofループ