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

如何用jQuery处理嵌套JSON实现各列偶数项求和并新增合计行

原代码核心问题
  • 内层循环将单元格值直接推入全局的ws_row,但组装当前行的row数组始终为空,最终推入ws_data的都是空行,根本没法正确渲染提取的qText
  • 没有逐列跟踪真实数值,不具备计算列合计的基础条件
实现方案

处理规则

  • 表格展示层直接提取单元格的qText值,保证原有渲染效果不变
  • 计算层仅提取单元格真实的qNum数值,自动排除NaN类的文本、空值单元格
  • 合计值仅统计各列中的偶数数值项:严格按数学定义,只有能被2整除的整数才算有效统计项,小数、奇数、非数值类内容都不参与累计
  • 每列独立累计总和,最终在表格末尾追加一行独立的合计行

修正后的完整可运行代码

// 初始化最终表格数据源
const ws_data = [];
// 从首行获取总列数,避免列数不匹配导致的索引越界
const totalColumns = data[0].length;
// 初始化每列的合计值数组,所有列初始值为0
const columnTotals = new Array(totalColumns).fill(0);

$.each(data, function(rowIndex, rowCells) {
  const currentRow = [];
  $.each(rowCells, function(cellIndex, cellData) {
    // 提取qText存入当前行,修复原代码空行问题
    currentRow.push(cellData.qText);

    // 逐单元格做合计判断
    const cellRealNum = cellData.qNum;
    // 严格偶数判断:必须是整数且能被2整除
    if (Number.isInteger(cellRealNum) && cellRealNum % 2 === 0) {
      columnTotals[cellIndex] += cellRealNum;
    }
  });
  // 把组装完成的有效行推入最终数据源
  ws_data.push(currentRow);
});

// 组装合计行
const totalRow = columnTotals.map((sum, colIndex) => {
  // 第一列固定显示“合计”标识,区分普通数据行
  if (colIndex === 0) return '合计';
  // 可根据业务需要调整保留的小数位数
  return sum.toFixed(2);
});
// 将合计行追加到表格数据源的最末尾
ws_data.push(totalRow);

自定义适配调整

  • 如果需要把带小数的数值按取整结果判断是否为偶数,只需要把偶数判断条件替换为:
    if (Math.abs(cellRealNum) % 2 < Number.EPSILON) {
      columnTotals[cellIndex] += cellRealNum;
    }
    
  • 如果某列全为非数值类内容,累计值会默认显示为0,可在组装合计行时按需替换为“-”标识

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 15:54:01