如何更高效地统计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
优化优势
- 性能提升:仅遍历一次工单数组,避免多次过滤遍历造成的性能开销
- 维护便捷:消除重复逻辑,后续新增状态或严重级别时,只需在对应统计对象中添加键名即可
- 鲁棒性增强:处理了总数为0时的除以0异常情况
内容的提问来源于stack exchange,提问作者user3662671
相关产品推荐
相关产品推荐

