Javascript 将数组数据转换为百分比值
我有一个使用DataTables的程序,它目前正在显示所有数据项的总值,同时也按office显示每个类别的总值。我还想这样做,以便您可以看到每个办事处在总捐款中所占的百分比。我很难弄清楚如何遍历数组并获取值,以便正确计算它们 $document.ready 作用{ $'reportTable'。数据表 { dom:'Blfript',//Blfrtip 按钮: [ { 扩展:“pdf”, 页脚:是的, 类名:“绿色图标文件”, 标题:"报告",, 文件名:“报告”, 定位:'景观', pageSize:'合法', 出口选择: { 列:[0,1,2,3,4,5] } }, { 扩展:“excel”, 页脚:是的, className:“绿色图标列表alt”, 标题:"报告",, 文件名:“报告”, pageSize:'合法', 出口选择: { 列:[0,1,2,3,4,5] } }, { 扩展:“复制”, 标题:"报告",, 页脚:是的, className:“绿色标志符号标志符号重复”, 出口选择: { 列:[0,1,2,3,4,5] } }, { 扩展:“打印”, 页脚:是的, 类名:“绿色字形图标”“字形图标打印”, 文本:“打印”, 标题:“”, 自动打印:对, 定位:'景观', pageSize:'合法', 出口选择: { 列:[0,1,2,3,4,5] }, //格式化导出的页脚不起作用 自定义:函数win { var body=$win.document.body.find'table tfoot'; $body.append$body.find'tr:eq0'。克隆; var row=$body.find'tr'.last; //$row.find'th'。文本'NEW'; $row.find'th:eq7'。文本'First column'; }, } ], footerCallback:函数行、开始、结束、显示 { var api=this.api,数据; //删除格式以获取求和的整数数据 var intVal=函数i { 返回类型i==='string'? i、 替换/[\$,]/g,*1: i的类型=='编号'? i:0; }; //总页数 总计=空气污染指数 .专栏5 数据 .还原函数a,b { 返回intVala+intValb; }, 0; //所有筛选页面的总计 如果api .第5栏, { 搜索:“已应用” } 数据 长 { pageTotal=api .第5栏, { 搜索:“已应用” } 数据 .还原函数a,b { 返回intVala+intValb; }; }否则{ pageTotal=0; } //按办事处开列的总额 var office=api.column2.data.sort.unique.toArray; var总计=[]; 对于var i=0;iJavascript 将数组数据转换为百分比值,javascript,arrays,datatables,Javascript,Arrays,Datatables,我有一个使用DataTables的程序,它目前正在显示所有数据项的总值,同时也按office显示每个类别的总值。我还想这样做,以便您可以看到每个办事处在总捐款中所占的百分比。我很难弄清楚如何遍历数组并获取值,以便正确计算它们 $document.ready 作用{ $'reportTable'。数据表 { dom:'Blfript',//Blfrtip 按钮: [ { 扩展:“pdf”, 页脚:是的, 类名:“绿色图标文件”, 标题:"报告",, 文件名:“报告”, 定位:'景观', page
我今天在玩这个游戏,因为我需要从其他事情上分散自己的注意力,我想到了这个,它不能满足你的所有需要,但它离你不远了:
$(document).ready(
function () {
$('#reportTable').DataTable({
"footerCallback": function (row, start, end, display){
const intVal = i => typeof i === 'string' ? parseInt(i.replace(/[\$,]/g, ''), 10) : typeof i === 'number' ? i : 0,
api = this.api(),
obj = {
total: api.column(5).data().reduce((a, b) => a + intVal(b), 0),
offices: []
};
api.column(2).data().sort().unique().toArray().forEach(office => {
obj.offices.push({
office,
total: 0
});
});
api.rows().every(a => {
let d = api.row(a).data()
obj.offices.find(x => x.office === d[2]).total += intVal(d[5]);
});
const footer = [`Grand total: ${numeral(obj.total).format('$0,0.00')}`];
obj.offices.forEach(o => {
footer.push(`<strong>${o.office}</strong>: ${numeral(o.total).format('$0,0.00')} (${((o.total * 100) / obj.total).toFixed(2)}%)`)
});
$(api.column(5).footer()).html(footer.join("<br>"));
},
});
}
);
希望有点…请不要将工作代码发布到第三方网站,因为这些链接可能会随着时间的推移而消失。当你像我为你做的那样撰写问题时,只需将你的可执行代码作为一个代码片段放在工具栏上就可以了。当寻找总数的百分比时,这通常是“简单”的,因为你使用的是动态数据,并且可以从其他函数(如PHP或其他东西)中提取此类计算。在您的示例中,您展示了停滞的数据,这不太可能是真实情况,而且更难处理。你从哪里得到这些数据?i、 例如,动态信息在哪里,因此可以考虑用于其他计算。否则,您需要保留数字的“运行总数”,然后运行另一个循环来计算百分比,然后更新每一行,如我所说的“混乱”…很抱歉没有使用代码段。我以后一定会这么做的!数据是从SQL数据库中提取出来的,并且没有硬编码到我的程序中。我刚刚在JSFIDLE上找到了一些用于测试的随机信息。谢谢!那肯定会让事情进展顺利。这让我快发疯了D