如何在JavaScript中对嵌套数组表格的某一列值求和?
计算嵌套数组中金额总和的实现方案
问题背景
我有一组结构简单的数据,存储在名为finances的嵌套数组中,数组首个元素是包含Month(月份)和Amount(金额)的表头行。我已经通过console.table(finances)确认了数据结构,也通过NumberOfMonths变量验证了数据行数,现在需要计算所有金额的总和。
数据示例:
var finances = [ ['Month', 'Amount'], ['Jan-2010', 867884], ['Feb-2010', 984655], // ... 剩余数据行 ['Feb-2017', 671099] ]; // 已执行的验证操作 console.table(finances); var NumberOfMonths = finances.length - 1; console.log(NumberOfMonths);
方法1:基础for循环
这是最直观的实现方式,跳过表头行(索引0),遍历所有数据行累加金额:
var totalAmount = 0; // 从索引1开始遍历,跳过表头 for (let i = 1; i < finances.length; i++) { totalAmount += finances[i][1]; } console.log('总金额:', totalAmount);
说明:初始化总和变量为0,循环遍历除表头外的每一行,将每行的金额(子数组的第二个元素finances[i][1])累加到总和中,最终输出结果。
方法2:forEach遍历
利用数组的forEach方法,结合slice(1)跳过表头,代码更简洁:
var totalAmount = 0; // 生成去掉表头的新数组,遍历累加 finances.slice(1).forEach(row => { totalAmount += row[1]; }); console.log('总金额:', totalAmount);
说明:finances.slice(1)会创建一个不包含表头的新数组,然后对每个数据行执行累加操作,逻辑清晰易读。
方法3:reduce方法(推荐)
reduce是数组专门用于归并操作的方法,语义化更强,代码最简洁:
// 写法1:直接在reduce中跳过表头 var totalAmount = finances.reduce((sum, row, index) => { return index === 0 ? sum : sum + row[1]; }, 0); // 写法2:先去掉表头再reduce(更简洁) var totalAmount = finances.slice(1).reduce((sum, row) => sum + row[1], 0); console.log('总金额:', totalAmount);
说明:reduce接收累加器sum、当前元素row和索引index,初始值设为0。写法1通过判断索引跳过表头,写法2先剔除表头再执行归并,最终都能得到所有金额的总和。
内容的提问来源于stack exchange,提问作者Jon Garnett-Smith
相关产品推荐
相关产品推荐

