DataTables求和问题:过滤指定列后计算目标列总和
修正后的DataTables求和实现
明确需求:仅统计第8列值**不是'Cerere'**的行中,第6列数值的总和。
原代码的问题
- 过滤条件错误:同时排除了'Cerere'和'Anulat',不符合当前只排除'Cerere'的要求
- 链式调用逻辑错误:
filter()返回的是DataTables API实例,后续不需要额外调用.data(),否则会破坏API链式调用,导致column()方法无法正确获取过滤后的数据
修正后的代码
let total = $('#datatable1').DataTable() // 过滤掉第8列值为'Cerere'的行 .rows(function(idx, data, node) { return data[8] !== 'Cerere'; }) // 获取过滤后的所有行数据 .data() // 对第6列数值求和,兼容非数值情况 .reduce(function(a, b) { const numA = parseInt(a) || 0; const numB = parseInt(b[6]) || 0; return numA + numB; }, 0);
代码说明
- 用
rows()回调函数精准筛选行:返回true则保留该行,这里直接判断第8列不等于'Cerere' - 直接通过
.data()拿到过滤后的行数据数组,再用reduce遍历求和 - 加入
|| 0处理非数值内容,避免求和时出现NaN
如果需要结合表格已有的用户搜索过滤结果(比如手动搜索后的表格数据),可以给rows()加上参数:
let total = $('#datatable1').DataTable() .rows({ search: 'applied' }, function(idx, data, node) { return data[8] !== 'Cerere'; }) .data() .reduce(function(a, b) { const numA = parseInt(a) || 0; const numB = parseInt(b[6]) || 0; return numA + numB; }, 0);
内容的提问来源于stack exchange,提问作者BoBiTza
相关产品推荐
相关产品推荐

