Javascript 添加列,然后按类别分隔数据
我已经研究了一段时间,现在还没有找到一个坚实的资源,我想做什么。我目前有一个DataTable,它根据用户应用的过滤器(可以是日期、名称等)显示总工作小时数和总工作小时数。我想实现的是将汇总总数进一步细分,以显示每个类别的工作小时数。例如(以我制作的JSFIDLE为例),如果您搜索“工程师”,那么不仅会显示一个总数,还会显示每个办公地点的总数(忽略项目符号):Javascript 添加列,然后按类别分隔数据,javascript,jquery,asp.net-mvc,datatables,Javascript,Jquery,Asp.net Mvc,Datatables,我已经研究了一段时间,现在还没有找到一个坚实的资源,我想做什么。我目前有一个DataTable,它根据用户应用的过滤器(可以是日期、名称等)显示总工作小时数和总工作小时数。我想实现的是将汇总总数进一步细分,以显示每个类别的工作小时数。例如(以我制作的JSFIDLE为例),如果您搜索“工程师”,那么不仅会显示一个总数,还会显示每个办公地点的总数(忽略项目符号): 伦敦:295500美元 旧金山:409 350美元 新加坡:234 500美元 东京:139575美元 爱丁堡:103600美元 纽约
- 伦敦:295500美元
- 旧金山:409 350美元
- 新加坡:234 500美元
- 东京:139575美元
- 爱丁堡:103600美元
- 纽约:125 250美元
- 总小时数:1307775.00美元
"footerCallback": function (row, start, end, display) {
var api = this.api(),
data;
// Remove the formatting to get integer data for summation
var intVal = function (i) {
return typeof i === 'string' ?
i.replace(/[\$,]/g, '') * 1 :
typeof i === 'number' ?
i : 0;
};
// Total over all pages
total = api
.column(5)
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
}, 0);
// Total over all filtered pages
if (api.column(5, {
search: 'applied'
}).data().length) {
pageTotal = api
.column(5, {
search: 'applied'
})
.data()
.reduce(function (a, b) {
return intVal(a) + intVal(b);
});
} else {
pageTotal = 0;
}
$(api.column(5).footer()).html(
pageTotal.toFixed(2)
);
// Update footer
$(api.column(5).footer()).html(
pageTotal.toFixed(2) + ' hours ( ' + total.toFixed(2) + ' total hours)'
);
以下是指向我的JSFIDLE的链接:
我希望分类是动态的,而不是硬编码的,因为我确信,对于我正在制作的程序,它们将随着时间的推移而发生变化。我非常感谢您在这个问题上提供的任何帮助。您希望减少所有行数据并提取公共值以用作对象键。这是一种非常常见的
groupBy
模式
按办公室汇总工资的示例:
var byOffice = api.rows().data().reduce(function(a, c) {
a[c[2]] = a[c[2]] || 0;
a[c[2]] += intVal(c[5]);
return a
}, {});
这将返回一个对象,其中办公室名称作为键,工资总额作为值
然后迭代该对象以创建所需的任何html
谢谢您的支持。我将对此进行调查,看看我能做些什么。我似乎无法正确显示数据。我一直在显示[object]错误。获取数据并以html格式显示的正确方法是什么?如果使用
Object.entries(byOffice)
将获得数组,其中第一个元素是office,第二个元素是valuePerfect。非常感谢你。