在制表器中显示总值而不是总百分比

时间:2021-04-30 10:26:53

标签: javascript tabulator

我目前正致力于在制表器上显示数据,我想根据百分比值显示数据 所以,我做了那部分,但现在使用 bottomCalc 对值求和,它显示总百分比,而不是总百分比我想显示原始值,但想不出任何逻辑来做到这一点。我有什么办法可以做到吗?? 我想要的总数 enter image description here

正如您在图像中看到的,上面有单选按钮,我可以从中更改制表器数据。 当我点击单选按钮时,我得到了这个 enter image description here

这里我总共得到 100 的百分比,但我想显示这些值它在上面的图片中显示为总值。

我为此所做的代码是:

initTable = function (data, modified) {
    if (!modified) window.initialTableData = data;
    if (!modified) window.initialFilters = data[0].Query.Filters;
    if (data && Object.keys(data[0])) {
        let cols = [];
        Object.keys(data[0]) ? Object.keys(data[0]).map((v) => {
            if (v != "Geom" && v != "Query" && v != "Additional") {
                if (v != "District"  && document.getElementById("RowWise").checked == false) {
                    cols.push({
                        title: v, bottomCalc: "sum", field: v, formatter: function (cell) {
                            var value = cell.getValue();
                            value = isNaN(value) ? value : numberWithCommas(value);
                            if (typeof (cell.getField) != 'undefined') {
                                if (checkKeyInFilters(cell.getField(), window.initialFilters)) {
                                    return "<span class='field-color'>" + value + "</span>";
                                } else {
                                    return "<span>" + value + "</span>";
                                }
                            }
                        }, headerMenu: headerMenu,
                        titleFormatter: function (cell) {
                            if (checkKeyInFilters(cell.getValue(), window.initialFilters)) {
                                $(cell.getElement()).addClass("field-color");
                            }
                            return cell.getValue();
                        }
                        //topCalc: (!checkKeyInFilters(v, data[0].Query.Filters) ? "sum" : undefined)
                    });
                }
                else {
                    cols.push({
                        title: v, field: v, formatter: function (cell) {
                            var value = cell.getValue();
                            value = isNaN(value) ? value : numberWithCommas(value);
                            if (typeof (cell.getField) != 'undefined') {
                                if (checkKeyInFilters(cell.getField(), window.initialFilters)) {
                                    return "<span class='field-color'>" + value + "</span>";
                                } else {
                                    return "<span>" + value + "</span>";
                                }
                            }
                        }, headerMenu: headerMenu,
                        titleFormatter: function (cell) {
                            if (checkKeyInFilters(cell.getValue(), window.initialFilters)) {
                                $(cell.getElement()).addClass("field-color");
                            }
                            return cell.getValue();
                        }
                        //topCalc: (!checkKeyInFilters(v, data[0].Query.Filters) ? "sum" : undefined)
                    });
                }
            }
            return v;
        }) : undefined;

        //cols.push({ title: "Total", field:"Total" })
        window.tableAnalyis = new Tabulator("#analysis-table", {
            layout: "fitColumns",
            responsiveLayout: "collapse",
            data: data,
            columns: cols,
            
             

        });
       
    }

对于我所做的百分比计算

changeCalcType = function (type) {
    if (!window.initialTableData) return;
    window.toggleLoader(true, "Please wait..");
    setTimeout(function () {
        const data2 = window.initialTableData;
        var C_Sum = {};
        pdata = [];
        var keys = Object.keys(data2[0]);
        if (type == 'numberwise') {
           
            
            pdata = window.initialTableData;
            
        }
        else if (type == 'rowwise') {
            for (i = 0; i < data2.length; i++) {
                for (j = 0; j < keys.length; j++) {
                    if (isNaN(data2[i][keys[j]]) == false && keys[j] != 'Total' && keys[j] != 'Pincode') {
                        if (C_Sum[i]) {
                            C_Sum[i] += data2[i][keys[j]];
                        } else {
                            C_Sum[i] = data2[i][keys[j]];
                            
                        }
                    }
                }

            }
            for (i = 0; i < data2.length; i++) {
                let _dt = {};
                for (j = 0; j < keys.length; j++) {
                    if (isNaN(data2[i][keys[j]]) == true || keys[j] == 'Total' || keys[j] == 'Pincode') {
                        _dt[keys[j]] = data2[i][keys[j]];
                    } else {
                        _dt[keys[j] + " (%)"] = Math.round((data2[i][keys[j]] / C_Sum[i]) * 100);
                        
                    }

                }
                
                _dt["Total"] = C_Sum[i]
                pdata.push(_dt);
                
                
            }
           

        }
        else if (type == 'columnwise') {
           let  S_Sum = {}
            for (i = 0; i < data2.length; i++) {
                for (j = 0; j < keys.length; j++) {
                    if (isNaN(data2[i][keys[j]]) == false && keys[j] != 'Total' && keys[j] != 'Pincode') {
                        if (C_Sum[keys[j]]) {
                            C_Sum[keys[j]] += data2[i][keys[j]];
                        } else {
                            C_Sum[keys[j]] = data2[i][keys[j]];
                        }
                    }
                    
                }

            }
            for (i = 0; i < data2.length; i++) {
                let _dt = {};
                for (j = 0; j < keys.length; j++) {
                    if (isNaN(data2[i][keys[j]]) == true || keys[j] == 'Total' || keys[j] == 'Pincode') {
                        _dt[keys[j]] = data2[i][keys[j]];
                    } else {
                        _dt[keys[j] + " (%)"] = Math.round((data2[i][keys[j]] / C_Sum[keys[j]]) * 100);
                    }
                }
               
                pdata.push(_dt);
                
                
            }

        }
        else if (type == 'totalwise') {
            let S_Sum = {};
            for (i = 0; i < data2.length; i++) {
                for (j = 0; j < keys.length; j++) {
                    if (isNaN(data2[i][keys[j]]) == false && keys[j] != 'Total' && keys[j] != 'Pincode') {
                        if (C_Sum[keys[j]]) {
                            C_Sum[keys[j]] += data2[i][keys[j]];
                        } else {
                            C_Sum[keys[j]] = data2[i][keys[j]];
                        }
                    }
                    if (isNaN(data2[i][keys[j]]) == false && keys[j] != 'Total' && keys[j] != 'Pincode') {
                        if (S_Sum[i]) {
                            S_Sum[i] += data2[i][keys[j]];
                        } else {
                            S_Sum[i] = data2[i][keys[j]];
                        }
                    }
                }
            }
            for (i = 0; i < data2.length; i++) {
                let _dt = {};
                for (j = 0; j < keys.length; j++) {
                    if (isNaN(data2[i][keys[j]]) == true || keys[j] == 'Total' || keys[j] == 'Pincode') {
                        _dt[keys[j]] = data2[i][keys[j]];
                    } else {
                        let _totvalue = Object.values(C_Sum).reduce((a, b) => a + b, 0);
                        _dt[keys[j] + " (%)"] = Math.round((data2[i][keys[j]] / _totvalue) * 100);
                    }
                }
                _dt["Total"] = S_Sum[i]
                pdata.push(_dt);
            }
        }
        
        initTable(pdata, true);
        window.toggleLoader(false);
    }, 100);

}

请帮我度过难关。

1 个答案:

答案 0 :(得分:0)

我终于明白了,不是通过 tabulator 内置函数,而是在 制表并获取总值作为临时解决方案

代码有点像:

else if (type == 'columnwise') {
            let data3 = window.initialTableData;
            for (i = 0; i < data2.length; i++) {
                for (j = 0; j < keys.length; j++) {
                    if (isNaN(data2[i][keys[j]]) == false && keys[j] != 'Total' && keys[j] != 'Pincode') {
                        if (C_Sum[keys[j]]) {
                            C_Sum[keys[j]] += data2[i][keys[j]];
                        } else {
                            C_Sum[keys[j]] = data2[i][keys[j]];
                        }
                    }

                }
            }
            
            for (i = 0; i < (data2.length); i++) {
                let _dt = {};
                
                for (j = 0; j < keys.length; j++) {
                    if (isNaN(data2[i][keys[j]]) == true || keys[j] == 'Total' || keys[j] == 'Pincode') {
                        _dt[keys[j]] = data2[i][keys[j]];
                    } else {
                        _dt[keys[j] + " (%)"] = Math.round((data2[i][keys[j]] / C_Sum[keys[j]]) * 100);
                    }
                }
                
                pdata.push(_dt);
            }
            let isTotalColAdded = false;
            let _dt = {};
            for (j = 0; j < keys.length; j++) {
                if (isNaN(data2[0][keys[j]]) == true || keys[j] == 'Total' || keys[j] == 'Pincode') {
                    _dt[keys[j]] = data2[0][keys[j]];
                    if (!isTotalColAdded) _dt[keys[j]] = "Total";
                } else {
                    _dt[keys[j] + " (%)"] = C_Sum[keys[j]];
                }
            }
            pdata.push(_dt);
        }
相关问题