You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataTable中按条件求和?遇sum不是函数报错

解决DataTables客户端求和报错及实现条件求和

报错原因

你遇到的sum is not a function错误,是因为DataTables的column().data()返回的是DataTables API对象,并非原生数组,本身没有内置的sum()方法,需要自行实现遍历计算逻辑。

实现列1等于列2时列5求和的代码

假设你的表格ID为yourTable,且列索引遵循DataTables默认的0起始规则(即你说的列1对应索引0,列2对应索引1,列5对应索引4),可以用以下两种方式实现:

方式1:使用rows().every()遍历

// 获取DataTables实例
var table = $('#yourTable').DataTable();

var totalSum = 0;
// 遍历所有行数据
table.rows().every(function() {
    var rowData = this.data();
    // 判断列1与列2的值是否相等
    if (rowData[0] === rowData[1]) {
        // 将列5的值转为数字,避免非数值导致NaN
        var colValue = parseFloat(rowData[4]);
        if (!isNaN(colValue)) {
            totalSum += colValue;
        }
    }
});

// 将结果输出到页面(示例:放到id为sumResult的元素中)
$('#sumResult').text('符合条件的总和:' + totalSum.toFixed(2));

方式2:使用数组reduce方法

var table = $('#yourTable').DataTable();
// 将表格数据转为原生数组
var allRows = table.rows().data().toArray();

// 用reduce计算符合条件的总和
var totalSum = allRows.reduce(function(acc, row) {
    if (row[0] === row[1]) {
        var val = parseFloat(row[4]);
        return acc + (isNaN(val) ? 0 : val);
    }
    return acc;
}, 0);

// 输出结果
$('#sumResult').text('符合条件的总和:' + totalSum.toFixed(2));

注意事项

  • 列索引对应:如果你的列是按可视顺序计数(比如表格显示的第一列是列1),需确保代码中的索引与实际列位置对应(可视列索引同样从0开始)。
  • 分页/过滤场景:如果只需要计算当前页或过滤后的数据,将table.rows()改为table.rows({page:'current'})或table.rows({search:'applied'})。
  • 数据类型处理:如果列5的值可能包含非数字内容,一定要用parseFloat转换并判断isNaN,避免计算结果出错。

内容的提问来源于stack exchange,提问作者Sami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 01:20:05