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

JavaScriptで配列内の同じ値を持つオブジェクトの出現回数をカウントする方法

JavaScriptでは、オブジェクトの配列の中に、特定のプロパティ値を持つ要素がいくつ含まれているかを集計したいケースがよくあります。本記事では、フライトの路線情報を表すオブジェクト配列を例に、return プロパティの値ごとに出現回数をカウントする方法を解説します。

問題の概要

まず、次のようなフライト路線を表すオブジェクトの配列があるとします。

const routes = [
  {
    flyFrom: "CDG",
    flyTo: "DUB",
    return: 0,
  },
  {
    flyFrom: "DUB",
    flyTo: "SXF",
    return: 0,
  },
  {
    flyFrom: "SFX",
    flyTo: "CDG",
    return: 1,
  }
];

この配列に対して、「return: 0」が何回登場し、「return: 1」が何回登場するかを数えます。最終的な出力イメージは以下の通りです。

return: 0 が 2 回出現している場合 --- 1 Stop(乗り継ぎあり)
return: 1 が 1 回出現している場合 --- Non-stop(直行便)

実装コード

実際のコードは以下のようになります。

const routes = [
  {
    flyFrom: "CDG",
    flyTo: "DUB",
    return: 0,
  },
  {
    flyFrom: "DUB",
    flyTo: "SXF",
    return: 0,
  },
  {
    flyFrom: "SFX",
    flyTo: "CDG",
    return: 1,
  }
];

const displaySimilar = arr => {
  // 各 return 値の出現回数を集計
  const count = {};
  arr.forEach(el => {
    count[el.return] = (count[el.return] || 0) + 1;
  });

  // 集計結果をもとに出力
  Object.keys(count).forEach(key => {
    for(let i = 0; i < count[key]; i++){
      if(key === '0'){
        console.log('1 Stop');
      }
      else if(key === '1'){
        console.log('Non-stop');
      };
    }
  })
};

displaySimilar(routes);

コードのポイント

  • 集計処理: 空のオブジェクト count を用意し、forEach() で各要素を走査しながら (count[el.return] || 0) + 1 で出現回数を加算します。右辺の || 0 により、まだ存在しないキーが初めて出現した場合でも 0 からカウントを開始できるため、エラーを防げます。
  • キーは文字列になる点に注意: オブジェクトのキーは常に文字列として扱われるため、比較の際は '0''1' のように文字列リテラルで判定します。
  • 出現回数分だけ表示: 集計した回数だけ for ループを回し、値に応じたメッセージを出力します。

実行結果

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

1 Stop
1 Stop
Non-stop

補足: reduce() を使ったより簡潔な書き方

reduce() を使えば、同じ集計処理をより短く記述することも可能です。

const count = routes.reduce((acc, el) => {
  acc[el.return] = (acc[el.return] || 0) + 1;
  return acc;
}, {});

console.log(count); // { '0': 2, '1': 1 }

このように、配列内の特定プロパティ値ごとの出現回数はシンプルなコードで簡単に集計できます。ログ分析や統計データの生成など、さまざまな場面で応用できるテクニックなので、ぜひマスターしておきましょう。

  1. JavaScriptで1からnまでの数値名の文字数をカウントする方法

    本記事では、数値 n を引数として受け取り、1 から n までの各数値を英語の名称(number name)で表記したときのアルファベットの文字数の合計を求める JavaScript 関数を作成する方法を解説します。 問題の例 まず、具体例で挙動を確認しましょう。n = 5 の場合、対象となる数値名は「one」「two」「three」「four」「five」です。 それぞれの文字数は 3・3・5・4・4 であるため、合計は 19 文字になります。したがって、この場合の出力は 19 となります。 解決アプローチ この問題を効率的に解くポイントは、毎回数値を文字列に変換して長さを測るのではな

  2. JavaScriptで配列から指定した数に最も近い値を取得する方法

    はじめに本記事では、JavaScriptを使って「配列の中から指定した数値に最も近い値を見つけて返す」関数の実装方法を解説します。この関数は、第1引数として数値の配列を、第2引数として単一の数値を受け取ります。そして、配列の中から第2引数で指定された数値に最も近い要素を探し出し、その値を返します。問題の例例えば、以下のような配列と数値が与えられた場合を考えてみましょう。const arr = [34, 67, 31, 53, 89, 12, 4]; const num = 41;この場合、41に最も近い配列の要素は 34 となるため、出力結果は 34 になります。実装コード以下が実際のコード例