サーバーからデータテーブルに送られるデータがあります。テーブルにデータを正常に入力していますが、フッター コールバックで統計を行いたいと考えています。
次のようなデータがあるとしましょう。
var data = [{
date: '2013-05-12',
holiday: "One type of holiday",
dayType: "Weekend"
}, {
date: '2013-05-13',
holiday: "Another type",
dayType: "Weekend"
}, {
date: '2013-05-14',
holiday: "Another type",
dayType: "Work"
}, {
date: '2013-05-15',
holiday: "",
dayType: "Work"
}];
休日が異なる日数を数えたいと思います。
取得したい結果は次のとおりです。
var summary= [
{
"One type of holiday": {
"work": 0,
"weekend": 1
}
},
{
"Another type": {
"work": 1,
"weekend": 1
}
}];
単純に休日を集計するための非常に単純なコードを作成しました。
for (var i = 0; i < data.length; i++) {
//console.log(data[i].holiday);
/*other stuff here*/
if (data[i].holiday.length > 0)
summary[data[i].holiday] = summary[data[i].holiday] + 1 || 1;
}
しかし、データ配列の休日にスペースが含まれているため、これにより無効な結果が得られます。
これを修正し、dayType に基づいて休日を分割する方法が必要です。
私の解決策: 私のバージョンの答え:
var summary = {}, d, tmp, type;
for (var i = 0; i < data.length; i++) {
var d = data[i];
if (d.holiday.length > 0) {
type = d.dayType == 'Weekend' || d.dayType == 'Free' ? 'Weekend' : 'Work';
tmp = summary[d.holiday];
if (!tmp) {
tmp = {
Weekend: 0,
Work: 0
};
summary[d.holiday] = tmp;
}
summary[d.holiday][type] += 1;
}
}
これは@Arun回答の修正版であるため、これをスタンドアロンの回答として投稿していません。
私のバージョンの方が理解しやすいと思います。誰かが役に立つといいのですが。