JavaScriptで配列内のユニークな要素の出現回数を数える方法
JavaScriptで、配列内に含まれるユニークな(重複していない)要素をすべて数える関数を作成する必要があります。この関数は、配列内の各ユニークな要素とその出現回数を対応付けたオブジェクトを返すように設計します。
それでは、具体的なコードを見ていきましょう。
実装例:forループを使った方法
まずは基本的なforループを使った実装です。
const arr = ["hi", "hello", "hi"];
const countUnique = arr => {
const counts = {};
for (var i = 0; i < arr.length; i++) {
counts[arr[i]] = 1 + (counts[arr[i]] || 0);
};
return counts;
};
console.log(countUnique(arr));このコードのポイントは、空のオブジェクトcountsを用意し、配列を順番に走査しながら各要素の出現回数を記録している点です。counts[arr[i]] || 0という書き方により、まだ一度も登場していない要素の場合は0からカウントを開始するため、初回アクセス時のエラーを回避しつつ正しく集計できます。
別の方法:reduceを使った簡潔な実装
同じ処理は、reduceメソッドを使うことでより短く書くことも可能です。
const countUnique = arr =>
arr.reduce((acc, val) => {
acc[val] = (acc[val] || 0) + 1;
return acc;
}, {});
console.log(countUnique(["hi", "hello", "hi"]));
// { hi: 2, hello: 1 }reduceを使うとアキュムレータ(累積オブジェクト)に対して直接集計できるため、コードがスッキリし、宣言的なスタイルになります。
出力結果
どちらの方法でも、コンソールには次のような結果が出力されます。
{ hi: 2, hello: 1 }この結果から、「hi」が2回、「hello」が1回出現していることが一目でわかります。用途やコードベースのスタイルに応じて、forループ版かreduce版を選択するとよいでしょう。
-
JavaScript配列から一意の値(重複なし)を取得する方法
JavaScriptの配列に含まれる重複した値を取り除き、一意の値(ユニークな値)だけを取得したい場合は、Setオブジェクトを使うのが最もシンプルで効率的な方法です。 Setは同じ値を1つしか格納できないデータ構造のため、配列をnew Set()に渡すだけで自動的に重複が排除されます。その後、スプレッド構文([...set])を使えば、簡単に元の配列形式へ戻すことができます。 サンプルコード 以下は、JavaScriptの配列からすべての一意の値を取得する実際のコード例です。 <!DOCTYPE html> <html lang=ja> <head> <
-
JavaScriptで配列を「2倍関係」を満たすように再配置できるか判定する方法
問題数値の配列 arr を第一引数(唯一の引数)として受け取るJavaScript関数を作成する必要があります。配列 arr の長さは必ず偶数であると保証されています。この関数は、すべての 0 <= i < arr.length / 2 に対して arr[2 * i + 1] = 2 * arr[2 * i] という条件を満たすように並べ替えられる場合にのみ true を返し、そうでなければ false を返す必要があります。たとえば、関数への入力が次の場合を考えてみましょう。const arr = [4, -2, 2, -4];このとき、期待される出力は次のとおりです。const