如果我有以下注册表,并希望按日期汇总。
var register = [
{date: '24/12/2015', present: 'P'},
{date: '24/12/2015', present: 'A'},
{date: '24/12/2015', present: 'P'},
{date: '25/12/2015', present: 'P'},
{date: '25/12/2015', present: 'P'}];
我正在寻找的结果如下所示(只要我能以某种格式获取摘要数据,就不必是这种格式 - 多维数组或对象数组很好)。最终我希望使用chart.js来显示出席日期。
'24/12/2015': {P: 2, A: 1},
'25/12/2015': {P: 2, A: 0}
在上面这些数字是' P'和' A'对于每个给定的日期。
我不知道如何使用下划线js来实现这一点 - 我认为可以使用indexBy和countBy来完成,但不是很确定!
答案 0 :(得分:3)
只需使用reduce
功能
register.reduce(function(memo, item){
if(!memo.hasOwnProperty(item.date)){
memo[item.date] = { P:0, A:0 };
}
memo[item.date][item.present]++;
return memo;
}, {});
答案 1 :(得分:1)
这可以在没有下划线的情况下实现
var register = [
{date: '24/12/2015', present: 'P'},
{date: '24/12/2015', present: 'A'},
{date: '24/12/2015', present: 'P'},
{date: '25/12/2015', present: 'P'},
{date: '25/12/2015', present: 'P'}];
var counted = register.reduce(function(sum, item) {
var date = item.date;
var present = item.present;
if (sum[date]) {
if (sum[date][present]) {
sum[date][present] = sum[date][present] + 1;
} else {
sum[date][present] = 1;
}
} else {
sum[date] = {};
sum[date][present] = 1;
}
return sum;
}, {})
snippet.log(counted)

<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
&#13;