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

在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;
}

代码说明

  1. 先判断传入的companyData是否为数组(对应你的JSON结构),如果是则取数组的第一个元素(即包含所有员工的对象)。
  2. 使用Object.values()将员工对象容器的所有值(也就是每个员工的详细信息)转换为数组,这样就能用forEach遍历。
  3. 遍历过程中累加每个员工的salary字段,最终返回总额。

调用示例

在handlebars模板中直接调用helper即可:

{{total company}}

内容的提问来源于stack exchange,提问作者Jacob Modiba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:50:26