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

JavaScriptで別の配列に含まれる要素の出現頻度を数える方法

問題

今回は、2つの文字列配列を受け取るJavaScript関数を作成します。この関数は、2番目の配列に含まれる各文字列が、1番目の配列の中に何回出現するかをカウントし、その結果を配列として返す必要があります。

例えば、1番目の配列に 'abc' が2回含まれていれば、結果には 2 が出力されるイメージです。

コード例

以下は、二重ループを使用して出現回数をカウントするシンプルな実装例です。

const arr1 = ['abc', 'abc', 'xyz', 'cde', 'uvw'];
const arr2 = ['abc', 'cde', 'uap'];

const findFrequency = (arr1 = [], arr2 = []) => {
   const res = [];
   let count = 0;

   // 2番目の配列の各要素について処理
   for (let i = 0; i < arr2.length; i++) {
      // 1番目の配列全体を走査して一致する要素をカウント
      for (let j = 0; j < arr1.length; j++) {
         if (arr2[i] === arr1[j]) {
           count++;
         }
      }
      res.push(count);
      count = 0; // カウンターをリセット
   }

   return res;
};

console.log(findFrequency(arr1, arr2));

出力

[2, 1, 0]

結果の解説

  • 'abc' は1番目の配列に2回出現するため 2
  • 'cde' は1番目の配列に1回だけ出現するため 1
  • 'uap' は1番目の配列に存在しないため 0

このように、結果の配列は入力した2番目の配列と同じ順序・同じ長さで対応します。

より簡潔な書き方:map と filter を活用

二重ループを明示的に書かなくても、map()filter() を組み合わせることで、同じ処理をより宣言的かつ簡潔に記述できます。

const findFrequency = (arr1 = [], arr2 = []) =>
   arr2.map(str => arr1.filter(item => item === str).length);

console.log(findFrequency(['abc', 'abc', 'xyz', 'cde', 'uvw'], ['abc', 'cde', 'uap']));
// 出力: [2, 1, 0]

この書き方は可読性が高く、意図も伝わりやすいため、実務でもよく使われるパターンです。ただし、どちらの方法も計算量は O(n × m) となるため、非常に大きな配列を扱う場合は、事前に Map やオブジェクトで1番目の配列の頻度表を作成しておくとパフォーマンスを改善できます。

  1. JavaScriptで配列を出現頻度の昇順に並べ替える方法

    問題数値の配列 arr を唯一の引数として受け取るJavaScript関数を作成する必要があります。配列 arr には重複した要素が含まれている可能性があります。この関数では、出現回数が少ない要素から順に配列を並べ替えます。つまり、出現頻度の低い要素を先頭に配置し、頻度の昇順に沿って残りの要素を並べていきます。なお、出現回数が同じ要素が複数存在する場合は、それらを値の昇順(小さい順)に配置する必要があります。入力例const arr = [5, 4, 5, 4, 2, 1, 12];出力例[1, 2, 12, 4, 4, 5, 5]出力の解説数値「1」「2」「12」はそれぞれ1回しか出現しない

  2. C++で別の配列を使って配列の要素を最大化する方法

    C++では、2つの配列を組み合わせて「大きい要素だけを持つ配列」を作り出すことができます。本記事では、サイズnの2つの配列が与えられたとき、両方の配列からn個の最大かつ重複しない要素を抜き出し、第2配列を優先しながら元の順序を保って第1配列を書き換えるアルゴリズムを、サンプルコードと実行結果あわせて解説します。 問題の概要 サイズnの2つの配列が与えられます。第2配列の要素を使って第1配列を最大化します。このとき、新しく作られる配列は次の条件を満たす必要があります。 両方の配列に含まれる要素の中から、大きい方からn個を選ぶ 選んだ要素は重複してはならない(すべて一意であること) 第2配列の要