在jsreport中用JavaScript计算JSON数据薪资总额报错求助
解决jsreport中计算员工薪资总额的报错问题
报错原因
你的JSON数据结构里,company是一个数组,数组内部仅包含一个以员工名为键的对象,而非直接的员工对象数组。原代码试图直接对传入的company(或其内部对象)调用forEach,但对象本身没有forEach方法,因此触发company.forEach is not a function错误。
原始数据结构拆解:
{ "company": [ { "Remy": {"age":32,"employer":"emp1","salary":20000}, "Piet": {"age":35,"employer":"emp2","salary":50000}, "Thando": {"age":32,"employer":"emp3","salary":20000}, "Greg": {"age":33,"employer":"emp4","salary":70000} } ] }
修正后的代码
function total(companyData) { var sum = 0; // 处理传入的是company数组的情况,提取内部的员工对象容器 var employeesContainer = Array.isArray(companyData) ? companyData[0] : companyData; // 遍历所有员工对象,累加薪资 Object.values(employeesContainer).forEach(function(employee) { sum += employee.salary; }); return sum; }
代码说明
- 先判断传入的
companyData是否为数组(对应你的JSON结构),如果是则取数组的第一个元素(即包含所有员工的对象)。 - 使用
Object.values()将员工对象容器的所有值(也就是每个员工的详细信息)转换为数组,这样就能用forEach遍历。 - 遍历过程中累加每个员工的
salary字段,最终返回总额。
调用示例
在handlebars模板中直接调用helper即可:
{{total company}}
内容的提问来源于stack exchange,提问作者Jacob Modiba
相关产品推荐
相关产品推荐

