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

【JavaScript】配列内の重複する名前の出現回数を数える方法(reduceを活用)

JavaScriptでオブジェクトの配列を扱う際、特定の値が何回出現するかを集計したい場面はよくあります。本記事では、配列内に繰り返し現れる名前の出現回数を、reduce()メソッドを使って効率的にカウントする方法を解説します。

サンプルデータの準備

まず、次のような学生情報の配列を例に考えてみましょう。

var details = [
    {
        studentName: "John",
        studentAge: 23
    },
    {
        studentName: "David",
        studentAge: 24
    },
    {
        studentName: "John",
        studentAge: 21
    },
    {
        studentName: "John",
        studentAge: 25
    },
    {
        studentName: "Bob",
        studentAge: 22
    },
    {
        studentName: "David",
        studentAge: 20
    }
]

この配列には「John」が3回、「David」が2回、「Bob」が1回登場しています。目標は、これらの出現回数を次のように集計することです。

John: 3
David: 2
Bob: 1

reduce()を使ったカウント方法

このような集計処理には、reduce()メソッドが最適です。reduce()は配列の各要素を順番に処理しながら、1つの結果(この場合は集計用オブジェクト)を組み立てていくことができます。

処理の流れは以下のとおりです。

  • 初期値として空のオブジェクト{}を用意する
  • 各要素からstudentNameを取り出し、その名前がまだキーとして存在しない場合は、出現回数1で新しいエントリを作成する
  • すでに存在する場合は、occurrencesプロパティを1つずつ増加させる
  • 最後にObject.values()で、キーを取り除いた結果の配列を取得する

コード例

実際のコードは次のとおりです。

var details = [
    {
        studentName: "John",
        studentAge: 23
    },
    {
        studentName: "David",
        studentAge: 24
    },
    {
        studentName: "John",
        studentAge: 21
    },
    {
        studentName: "John",
        studentAge: 25
    },
    {
        studentName: "Bob",
        studentAge: 22
    },
    {
        studentName: "David",
        studentAge: 20
    }
]

var output = Object.values(details.reduce((obj, { studentName }) => {
    if (obj[studentName] === undefined)
        obj[studentName] = { studentName: studentName, occurrences: 1 };
    else
        obj[studentName].occurrences++;
    return obj;
}, {}));

console.log(output);

ここでのポイントは、コールバック関数の第2引数で分割代入{ studentName }を使っている点です。これにより、各オブジェクトから名前だけを簡潔に取り出せます。

プログラムの実行方法

Node.jsで上記のプログラムを実行するには、次のコマンドを使用します。

node fileName.js

ここでは、ファイル名をdemo282.jsとして保存しています。実行すると、コンソールに以下の出力が表示されます。

PS C:\Users\Amit\javascript-code> node demo282.js
[
    { studentName: 'John', occurrences: 3 },
    { studentName: 'David', occurrences: 2 },
    { studentName: 'Bob', occurrences: 1 }
]

まとめ

reduce()Object.values()を組み合わせることで、配列内の重複データをシンプルなコードで集計できます。この手法は名前のカウントに限らず、カテゴリ別の集計やログデータの分析など、さまざまな場面で応用できる汎用的なテクニックです。ぜひ実際の開発でも活用してみてください。

  1. JavaScriptで配列内の最頻値とその出現回数を求める方法

    JavaScriptでは、リテラル(数値や文字列など)を含む配列を受け取り、その中で最も多く登場する要素(最頻値)と、それが何回繰り返されているかを出力する関数を書くことができます。実装の考え方この処理は、配列の reduce() メソッドを使うことで効率的に実装できます。各要素の出現回数をオブジェクトに記録しながら走査し、同時に最大出現回数を持つ要素を追跡します。同じ出現回数の要素が複数ある場合は、それらすべてを配列に格納して返すようにしています。コード例実際のコードは以下のとおりです。 count[acc[0]]) { return [val]; }

  2. JavaScriptで配列内の各要素の出現回数が一意かどうかを判定する方法

    本記事では、整数の配列を第1引数(唯一の引数)として受け取り、配列内に存在するすべての整数の出現回数が一意(ユニーク)であるかどうかを判定するJavaScript関数を作成します。問題の概要この関数は、配列内の各要素が出現する回数が互いに異なる場合には true を返し、同じ出現回数を持つ要素がひとつでも存在する場合には false を返す必要があります。入力例const arr = [7, 5, 5, 8, 2, 4, 7];出力例const output = false;この場合の出力が false になる理由は、整数 7 と 5 の両方が2回ずつ出現しており、出現回数が重複しているためで