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

JavaScriptで最も多く出現する要素の出現回数を見つける方法


本記事では、リテラルの配列を受け取り、その中で最も多く出現している要素の出現回数を返すJavaScript関数の作成方法を解説します。

実装のアプローチ

最頻出要素の出現回数を求めるには、まず各要素が何回登場するかを集計し、その最大値を取得するのが一般的です。ここではreduce()Mapオブジェクトを使って要素ごとの出現回数をカウントし、Math.max()で最大の出現回数を求める方法を紹介します。

サンプルコード

let arr = [2, 8, 4, 8, 6, 4, 7, 8];

const countOccurence = arr => {
    // 各要素の出現回数をMapに集計
    const counter = arr.reduce((acc, val) => {
        acc.set(val, (acc.get(val) || 0) + 1);
        return acc;
    }, new Map());
    
    // 出現回数の最大値を返す
    return Math.max(...counter.values());
};

console.log(countOccurence(arr));

出力結果

コンソールには以下のように表示されます。

3

コードの解説

この例では、配列 [2, 8, 4, 8, 6, 4, 7, 8] の中で「8」が3回出現しており、これが最も多い出現回数です。そのため、関数は「3」を返します。

reduce()の初期値として空のMapを渡し、ループの中で各要素をキーとして出現回数を1ずつ加算していきます。acc.get(val) || 0の部分により、まだ登録されていない要素は0からカウントが開始される仕組みです。最後にスプレッド構文でMapのすべての値を展開してMath.max()に渡すことで、最も多い出現回数を簡単に取得できます。

なお、この手法は数値だけでなく文字列など任意の型の要素にも対応でき、元の配列を一切変更しないため、安全かつ効率的に利用できます。


  1. 【JavaScript入門】配列内で最初の非連続な数値を見つける方法

    はじめに本記事では、JavaScriptを使って「数値の配列の中から、直前の要素と連続していない最初の数値」を見つける方法を解説します。アルゴリズムの練習やコーディング面接の対策としても役立つ基本的な問題です。 問題の定義数値の配列を受け取るJavaScript関数を作成する必要があります。この関数は、直前の要素に対して +1 となっていない(連続していない)最初の要素を返さなければなりません。 言い換えると、隣り合う要素同士の差が1以外になる箇所が現れたとき、その箇所の後ろ側の要素を返すという処理です。なお、そのような要素が必ず配列内に1つ以上存在するものとします。 サンプルコード以下は、実

  2. JavaScriptで昇順配列の中から並び順を壊している唯一の要素を見つける方法

    この記事では、昇順(増加順)にソートされた数値の配列の中に、ただひとつだけ並び順を乱している要素がある場合に、その要素を特定して返すJavaScript関数の実装方法を解説します。 問題の定義 扱う配列は基本的に昇順でソートされていますが、その中の要素がひとつだけ順序から外れています。関数の目的は、その「異常な要素」を見つけ出して返すことです。 たとえば、次のような配列を考えます。 const arr = [1, 2, 3, 4, 17, 5, 6, 7, 8]; この配列から「17」を取り除けば残りは完全な昇順になるため、求める答えは「17」です。 解決のアプローチ 昇順の配列では、隣り合う