Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将数组数据转换为百分比值_Javascript_Arrays_Datatables - Fatal编程技术网

Javascript 将数组数据转换为百分比值

Javascript 将数组数据转换为百分比值,javascript,arrays,datatables,Javascript,Arrays,Datatables,我有一个使用DataTables的程序,它目前正在显示所有数据项的总值,同时也按office显示每个类别的总值。我还想这样做,以便您可以看到每个办事处在总捐款中所占的百分比。我很难弄清楚如何遍历数组并获取值,以便正确计算它们 $document.ready 作用{ $'reportTable'。数据表 { dom:'Blfript',//Blfrtip 按钮: [ { 扩展:“pdf”, 页脚:是的, 类名:“绿色图标文件”, 标题:"报告",, 文件名:“报告”, 定位:'景观', page

我有一个使用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;i0 html.pushoffice[j]+':'+totals[j].toFixed2+'+percent+'%; } //更新页脚 $api.column5.footer.htmlhtml.length==0?:html.join++'$'+pageTotal.toFixed2++'过滤的总计'++'$'+total.toFixed2+'总计'; }, }; } ; $document.ready 作用 { $.fn.dataTable.ext.search.push 函数设置、数据、数据索引 { var min=$'min'.datepickergetDate; var max=$'max'.datepickergetDate; var startDate=new Datedata[0]; 如果min==null&&max==null{return true;} 如果min==null&&startDate=min{return true;} 如果startDate=min{返回true;} 返回false; } ; $min.datepicker{onSelect:function{table.draw;},changeMonth:true,changeYear:true}; $max.datepicker{onSelect:function{table.draw;},changeMonth:true,changeYear:true}; var table=$'reportTable'.DataTable; //事件侦听器到两个范围过滤输入,以便在输入时重新绘制 $“最小值,最大值”。更改 作用 { 表1.2-1; } ; } ; 开始日期: 结束日期: 名称 位置 办公室 年龄 开始日期 薪水 名称 位置 办公室 年龄 开始日期 薪水 老虎尼克松 系统架构师 爱丁堡 61 2011/04/25 $320,800 加勒特温特斯 会计 东京 63 2011/07/25 $170,750 阿什顿考克斯 初级技术作者 旧金山 66 2009/01/12 $86,000 塞德里克·凯利 高级Javascript开发人员 爱丁堡 22 2012/03/29 $433,060 佐藤航空 会计 东京 33 2008/11/28 $162,700 布里尔·威廉姆森 集成专家 纽约 61 2012/12/02 $372,000 赫罗德·钱德勒 营业员 旧金山 59 2012/08/06 $137,500 罗娜·戴维森 集成专家 东京 55 2010/10/14 $327,900 科琳赫斯特 Javascript开发人员 旧金山 39 2009/09/15 $205,500 索尼娅·弗罗斯特 软件工程师 爱丁堡 23 2008/12/13 $103,600 杰娜·盖恩斯 办公室经理 伦敦 30 2008/12/19 $90,560 奎因·弗林 支撑导线 爱丁堡 22 2013/03/03 $342,000 查尔德·马歇尔 区域主任 旧金山 36 2008/10/16 $470,600 海莉·肯尼迪 高级市场设计师 伦敦 43 2012/12/18 $313,500 塔蒂亚娜·菲茨帕特里克 区域主任 伦敦 19 2010/03/17 $385,750 迈克尔·席尔瓦 营销设计师 伦敦 66 2012/11/27 $198,500 柏德 首席财务官首席财务官 纽约 64 2010/06/09 $725,000 格洛丽亚·利特尔 系统管理员 纽约 59 2009/04/10 $237,500 布拉德利·格里尔 软件工程师 伦敦 41 2012/10/13 $132,000 戴里奥斯 人事领导 爱丁堡 35 2012/09/26 $217,500 杰内特·考德威尔 开发领导 纽约 30 2011/09/03 $345,000 尤里浆果 首席营销官 纽约 40 2009/06/25 $675,000 凯撒万斯 售前支持 纽约 21 2011/12/12 $106,450 多丽丝·怀尔德 营业员 西德尼 23 2010/09/20 $85,600 当归 首席执行官 伦敦 47 2009/10/09 $1,200,000 加文·乔伊斯 开发商 爱丁堡 42 2010/12/22 $92,575 张珍妮弗 区域主任 新加坡 28 2010/11/14 $357,650 布伦登·瓦格纳 软件工程师 旧金山 28 2011/06/07 $206,850 菲奥娜绿色 營運長 旧金山 48 2010/03/11 $850,000 寿伊图 区域营销 东京 20 2011/08/14 $163,000 米歇尔之家酒店 集成专家 西德尼 37 2011/06/02 $95,400 苏基伯克斯 开发商 伦敦 53 2009/10/22 $114,500 普雷斯科特·巴特利特 技术作者 伦敦 27 2011/05/07 $145,000 加文·科尔特斯 队长 旧金山 22 2008/10/26 $235,500 马蒂娜·麦克雷 售后支持 爱丁堡 46 2011/03/09 $324,050 统一管家 营销设计师 旧金山 47 2009/12/09 $85,675 霍华德·哈特菲尔德 办公室经理 旧金山 51 2008/12/16 $164,500 希望富恩特斯 秘书 旧金山 41 2010/02/12 $109,850 维维安·哈雷尔 财务总监 旧金山 62 2009/02/14 $452,500 蒂莫西·穆尼 办公室经理 伦敦 37 2008/12/11 $136,200 杰克逊·布拉德肖 经理 纽约 65 2008/09/26 $645,750 梁丽薇 支持工程师 新加坡 64 2011/02/03 $234,500 布鲁诺·纳什 软件工程师 伦敦 38 2011/05/03 $163,500 山本樱 支持工程师 东京 37 2009/08/19 $139,575 托尔·沃尔顿 开发商 纽约 61 2013/08/11 $98,540 芬兰卡马乔 支持工程师 旧金山 47 2009/07/07 $87,500 谢尔盖·鲍德温 数据协调员 新加坡 64 2012/04/09 $138,575 泽奈达·弗兰克 软件工程师 纽约 63 2010/01/04 $125,250 佐丽塔·塞拉诺 软件工程师 旧金山 56 2012/06/01 $115,000 詹妮弗·阿科斯塔 初级Javascript开发人员 爱丁堡 43 2013/02/01 $75,650 卡拉·史蒂文斯 营业员 纽约 46 2011/12/06 $145,600 赫敏·巴特勒 区域主任 伦敦 47 2011/03/21 $356,250 拉尔·格里尔 系统管理员 伦敦 21 2009/02/27 $103,500 乔纳斯·亚历山大 开发商 旧金山 30 2010/07/14 $86,500 鲱鱼 区域主任 爱丁堡 51 2008/11/13 $183,000 迈克尔·布鲁斯 Javascript开发人员 新加坡 29 2011/06/27 $183,000 唐娜·斯奈德 客户支持 纽约 27 2011/01/25 $112,000
我今天在玩这个游戏,因为我需要从其他事情上分散自己的注意力,我想到了这个,它不能满足你的所有需要,但它离你不远了:

$(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