下划线 js - indexBy / countBy 多个值
underscore js - indexBy / countBy multiple values
如果我有以下寄存器并想按日期汇总它。
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 来完成,但不太确定!
只需使用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;
}, {});
不用下划线也可以实现
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>
如果我有以下寄存器并想按日期汇总它。
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 来完成,但不太确定!
只需使用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;
}, {});
不用下划线也可以实现
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>