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

DataTables求和问题:过滤指定列后计算目标列总和

修正后的DataTables求和实现

明确需求:仅统计第8列值**不是'Cerere'**的行中,第6列数值的总和。

原代码的问题

  1. 过滤条件错误:同时排除了'Cerere'和'Anulat',不符合当前只排除'Cerere'的要求
  2. 链式调用逻辑错误: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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 06:32:07