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

