JavaScriptで日付(月)ごとにデータをグループ化する方法
はじめに
JavaScriptでは、ユーザーごとに整理されたデータを、日付を基準とした構造へ組み替えたいケースがよくあります。本記事では、ユーザー名をキーとするオブジェクトを受け取り、同じ日付を持つエントリ同士をグループ化した新しいオブジェクトを生成する関数の実装方法を解説します。
例として、次のようなユーザーデータを想定します。外側のキーはユーザー名、内側のキーは「年-月」形式の日付で、それぞれの値はその月の数値データです。
const obj = {
"Mary": {
"2016-1": 2,
"2016-5": 1,
"2016-3": 1
},
"Paul": {
"2016-1": 1,
"2016-3": 1
},
"moth": {
"2016-1": 2,
"2016-5": 1
}
};求められているのは、このようなオブジェクトを引数に受け取るJavaScript関数です。関数は、各ユニークな日付がひとつのオブジェクトとして表現されるように、ユーザーデータを再グループ化します。具体的には、各日付のオブジェクトに、該当するユーザー名の一覧(names)と、それに対応する数値の一覧(values)を持たせます。
実装コード
以下がその実装例です。
const obj = {
"Mary": {
"2016-1": 2,
"2016-5": 1,
"2016-3": 1
},
"Paul": {
"2016-1": 1,
"2016-3": 1
},
"moth": {
"2016-1": 2,
"2016-5": 1
}
};
const groupByDate = (obj = {}) => {
const names = Object.keys(obj);
const res = {};
for(let i = 0; i < names.length; i++){
const name = names[i];
const dates = Object.keys(obj[name]);
for(let j = 0; j < dates.length; j++){
const date = dates[j];
if(!res.hasOwnProperty(date)){
res[date] = {
names: [name],
values: [obj[name][date]]
}
}
else{
res[date].names.push(name);
res[date].values.push(obj[name][date]);
};
};
};
return res;
};
console.log(groupByDate(obj));処理の流れ
このコードのポイントは以下の通りです。
Object.keys()を使って、まずユーザー名の一覧を取得します。- 各ユーザーについて、そのユーザーが持つ日付キーを順番に走査します。
- 結果用のオブジェクト
resにまだその日付が存在しない場合は、namesとvaluesの配列を持つ新しいエントリを作成します。 - すでに日付が存在する場合は、既存の配列にユーザー名と値を追加していきます。
- 最後に、日付をキーとしてグループ化されたオブジェクトを返します。
出力結果
コンソールには次のように出力されます。
{
'2016-1': { names: [ 'Mary', 'Paul', 'moth' ], values: [ 2, 1, 2 ] },
'2016-5': { names: [ 'Mary', 'moth' ], values: [ 1, 1 ] },
'2016-3': { names: [ 'Mary', 'Paul' ], values: [ 1, 1 ] }
}このように、元のデータが「ユーザー単位」から「日付単位」の構造へと変換されました。たとえば「2016-1」には Mary・Paul・moth の3人が含まれ、それぞれの値(2、1、2)も正しく対応づけられていることが確認できます。この手法は、時系列での集計やグラフ描画など、日付を軸にデータを扱いたい場面で非常に便利です。
-
JavaScriptのハッシュテーブル:データ構造の基礎と実装方法を徹底解説
ハッシュテーブル(Hash Table)は、データを連想形式で格納するデータ構造です。ハッシュテーブルでは、データは配列形式で保持され、それぞれのデータ値に固有のインデックス値が割り当てられます。目的のデータのインデックスさえ分かれば、データへのアクセスは非常に高速に行えます。そのため、ハッシュテーブルはデータサイズの大小にかかわらず、挿入操作も検索操作も非常に高速に実行できるデータ構造となっています。ハッシュテーブルは配列を記憶領域として利用し、要素を挿入または検索すべきインデックスを生成するために「ハッシュ」という技法を用います。ハッシュ化(Hashing)とはハッシュ化とは、キー値の範囲
-
JavaScriptのグループ化演算子とは?優先順位の制御方法をサンプルコードで解説
グループ化演算子とはJavaScriptのグループ化演算子は、丸括弧「()」で表され、式を評価する際の優先順位を制御するために使用されます。通常、演算子にはあらかじめ決められた優先順位があり、乗算(*)や除算(/)は加算(+)や減算(-)よりも先に評価されます。しかし、グループ化演算子で式を囲むことで、この優先順位を意図的に変更し、囲まれた部分を最優先で計算させることができます。例えば「2+2*5/22」という式の場合、標準の優先順位では乗算・除算が先に実行されますが、丸括弧を使うことで「(2+2)*5/22」のように加算を先に行わせることが可能です。サンプルコード以下は、JavaScript