对接口返回表格多选数据做聚合计算的核心是:先通过维护每行的selected字段管理选中状态,再用filter和map提取指定字段值,最后用reduce等数组方法实现求和、平均、最值、计数等聚合操作,并可封装为支持字段名和方法参数的复用函数。

对接口返回的表格多选数据做聚合计算,核心是:先获取用户选中的行数据,再用 JavaScript 数组方法(如 reduce、filter)对指定字段进行求和、平均、计数等操作。关键在于“选中状态管理”和“字段提取逻辑”要清晰可靠。
1. 确保表格有可靠的选中状态标识
不要依赖 DOM 的 checkbox 临时勾选状态(容易丢失或不同步),推荐在每行数据中维护一个 selected 字段:
- 渲染表格时,把接口返回的原始数据存为响应式数组(如 Vue 的
ref或 React 的useState) - 点击复选框时,只更新对应项的
selected: true/false,不操作 DOM - 示例数据结构:[{ id: 1, name: "张三", price: 29.5, qty: 3, selected: true }, ...]
2. 提取所有已选中行的指定字段值
用 filter + map 快速拿到目标字段数组,避免手动遍历:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
const selectedItems = tableData.filter(item => item.selected); const prices = selectedItems.map(item => item.price); // [29.5, 45, 12.8] const quantities = selectedItems.map(item => item.qty); // [3, 1, 5]
3. 对字段数组执行常见聚合计算
用原生数组方法即可,无需引入额外库:
-
求和:
prices.reduce((a, b) => a + b, 0) -
平均值:
prices.length ? prices.reduce((a, b) => a + b, 0) / prices.length : 0 -
最大/最小值:
Math.max(...prices)或Math.min(...prices)(注意空数组会报错,建议加判断) -
计数(行数):
selectedItems.length -
去重后数量(如统计不同类别):
[...new Set(selectedItems.map(i => i.category))].length
4. 封装成可复用的计算函数
把逻辑收拢,支持动态传入字段名和聚合类型:
function aggregateSelected(data, field, method = 'sum') {
const values = data
.filter(item => item.selected)
.map(item => item[field])
.filter(v => v != null && !isNaN(v)); // 过滤空值和非法数字
if (values.length === 0) return 0;
switch (method) {
case 'sum': return values.reduce((a, b) => a + b, 0);
case 'avg': return values.reduce((a, b) => a + b, 0) / values.length;
case 'max': return Math.max(...values);
case 'min': return Math.min(...values);
default: return values.length;
}
}
// 使用示例:
const total = aggregateSelected(tableData, 'price', 'sum');
const avgQty = aggregateSelected(tableData, 'qty', 'avg');
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










