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

如何更高效地统计API返回工单的状态与严重级别数量?

工单统计代码优化方案

你的判断完全正确,当前写法冗余且低效——不仅重复了大量相同的空值检查和过滤逻辑,每次统计都要完整遍历一遍工单数组,存在明显的性能浪费。完全可以通过一次遍历完成所有统计,大幅精简代码的同时提升效率。

优化后的实现代码

const ticketStats = useMemo(() => {
  const ticketList = tickets?.results || [];
  const total = ticketList.length;
  
  // 初始化状态与严重级别的统计容器
  const statusCounts = {
    new: 0,
    in_progress: 0,
    closed: 0
  };
  const severityCounts = {
    critical: 0,
    high: 0,
    medium: 0,
    low: 0,
    informational: 0
  };

  // 一次遍历完成所有统计
  ticketList.forEach(ticket => {
    if (statusCounts.hasOwnProperty(ticket.status)) {
      statusCounts[ticket.status]++;
    }
    if (severityCounts.hasOwnProperty(ticket.severity)) {
      severityCounts[ticket.severity]++;
    }
  });

  return {
    total,
    ratio: total > 0 ? 100 / total : 0, // 处理总数为0时的除以0异常
    ...statusCounts,
    ...severityCounts
  };
}, [tickets]);

使用方式

优化后直接从ticketStats对象中获取对应统计值即可:

  • 总工单数量:ticketStats.total
  • 新工单数量:ticketStats.new
  • 进行中工单数量:ticketStats.in_progress
  • 已关闭工单数量:ticketStats.closed
  • 严重级别为critical的数量:ticketStats.critical
  • 统计比例:ticketStats.ratio

优化优势

  1. 性能提升:仅遍历一次工单数组,避免多次过滤遍历造成的性能开销
  2. 维护便捷:消除重复逻辑,后续新增状态或严重级别时,只需在对应统计对象中添加键名即可
  3. 鲁棒性增强:处理了总数为0时的除以0异常情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 05:40:14