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

React中如何计算vacancy数组内noOfVacancy字段的总和?

计算职位空缺数总和的实现方案

核心实现逻辑

用数组的reduce方法可以简洁高效地计算总和,同时能避免for循环容易出现的边界错误。需要注意将noOfVacancy转为数字类型(防止接口返回字符串导致求和异常),并处理数组为空的情况。

1. 编写复用的求和函数

const calculateTotalVacancies = (vacancyList) => {
  // reduce累加,初始值设为0,确保空数组时返回0
  return vacancyList.reduce((total, item) => {
    // 将noOfVacancy转为数字,处理可能的字符串类型,无效值按0处理
    const vacancyCount = Number(item.noOfVacancy) || 0;
    return total + vacancyCount;
  }, 0);
};

2. 获取总和的两种场景

  • 原始数据总和:直接传入vacancy数组
    const totalVacancies = calculateTotalVacancies(vacancy);
    
  • 搜索过滤后总和:传入filteredResults数组
    const filteredTotal = calculateTotalVacancies(filteredResults);
    

3. 在组件中使用示例

可以直接在JSX中调用,优先使用过滤后的数据(如果有搜索输入):

<div>总职位空缺数:{calculateTotalVacancies(filteredResults.length > 0 ? filteredResults : vacancy)}</div>

修正你代码中的潜在问题

你的useEffect里,setCompanyName(decoded.name)后立刻用companyName作为请求参数会出错——因为React的setState是异步的,此时companyName还是初始空字符串,导致请求参数错误。应该直接用decoded.name:

useEffect(() => {
  const userToken = localStorage.userToken;
  const decoded = jwt_decode(userToken);
  setCompanyName(decoded.name);
  // 直接用解码后的name发起请求,无需等待state更新
  axios
    .get(`http://localhost:5000/vacancy/get/name/${decoded.name}`)
    .then((response) => {
      setVacancy(response.data.exsitingVacancies);
    });
}, []); // 依赖设为空数组,仅初始化时执行一次

你的for循环出错原因

大概率是以下两个问题:

  • 初始状态vacancy是空数组,循环时访问vacancy[i].noOfVacancy会触发Cannot read properties of undefined错误
  • 接口返回的noOfVacancy是字符串类型,直接相加会变成字符串拼接而非数值求和

上面的reduce方法可以同时解决这两个问题。

内容的提问来源于stack exchange,提问作者Chamaka Mendis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:35:17