如何在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
相关产品推荐
相关产品推荐

