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

React表格实现不同行数值相乘并展示结果的技术求助

解决前端计算工资总额并展示的问题

看起来你已经搭好了表格渲染的基础框架,现在只需要完成Wage/hr和Attendance in the last 7days的相乘计算,把结果填充到Total Wages列就可以了。我来帮你一步步调整代码:

1. 直接在表格渲染时完成乘积计算

你当前代码里用了row.totalWages,但从你的Mongoose模型来看,并没有这个字段——这正是问题的核心!我们可以在渲染<td>的时候直接计算两个值的乘积,同时处理可能的空值避免出现NaN:

修改renderTable函数里的表格行部分:

filtered = this.state.data.map( (row, i,) => {
  if(row.department.toLowerCase().indexOf(this.state.departmentFilter) > -1){
    // 计算工资总额,处理可能的未定义数值
    const totalWages = (row.wages || 0) * (row.numberofPresentAttendances || 0);
    return (
      <tr key={"employeeData"+i}>
        <td>{i+1}</td>
        <td>{row.name}</td>
        <td>{row.numberofPresentAttendances}</td>
        <td>{row.department}</td>
        <td>{row.wages}</td>
        {/* 替换成计算后的结果 */}
        <td>{totalWages}</td>
        <td> </td>
      </tr>
    );
  } else {
    return undefined;
  }
});

2. 可选优化:数值格式化

如果需要让工资显示更规范(比如保留两位小数),可以用toFixed(2)来处理:

<td>{totalWages.toFixed(2)}</td>

3. 补充:确保出勤数的正确性

注意你的Mongoose模型里attendances是Object类型,要确保row.numberofPresentAttendances已经是正确统计出的最近7天出勤数。如果还没完成这个统计逻辑,可以在获取数据后先处理:

// 假设你在拿到原始数据后处理出勤数
const processedData = rawData.map(employee => {
  const sevenDaysAgo = new Date();
  sevenDaysAgo.setDate(sevenDaysAgo.getDate() - 7);
  let presentCount = 0;
  
  // 遍历attendances中的日期记录
  for(const dateStr in employee.attendances) {
    const attendanceDate = new Date(dateStr);
    if(attendanceDate >= sevenDaysAgo && employee.attendances[dateStr]) {
      presentCount++;
    }
  }
  
  return {
    ...employee,
    numberofPresentAttendances: presentCount
  };
});
this.setState({ data: processedData });

这样调整后,表格里的Total Wages列就能正确展示相乘后的结果啦!

内容的提问来源于stack exchange,提问作者8SINS

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:33:05