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

如何优化Pug/Node.js/Express中的循环逻辑,替代冗余if-else判断?

Pug循环逻辑优化方案

核心优化思路

  • 把重复的状态判断逻辑抽为状态映射配置表,替代多层if-else判断,查找效率O(1),修改维护只需要改一处配置
  • 把st1到st12的重复渲染逻辑改为内层循环,动态读取属性值,完全消除重复代码

具体实现步骤

步骤1:定义状态映射表

可以直接在Pug模板顶部定义,也可以在Express路由中渲染模板时传入:

//- 放在Pug模板顶部,或者Express侧传入:res.render('模板名', {statusMap: ...})
- const statusMap = {
  0: {class: 'badge-success', text: 'Good'},
  1: {class: 'badge-danger', text: 'Bad'},
  2: {class: 'badge-secondary', text: 'Excluded'},
  default: {class: 'badge-light', text: 'Disconnected'}
}

步骤2:改写循环渲染逻辑

替换原有所有重复的.col代码段为双层循环即可:

.row.row-cols-12
  each portmap in portMap2
    //- 循环生成12个状态列,可根据字段数量灵活调整长度
    each i in Array.from({length:12}, (_,k)=>k+1)
      - const statusVal = portmap[`st${i}`]
      - const {class: badgeClass, text: badgeText} = statusMap[statusVal] ?? statusMap.default
      .col
        span.badge.badge-pill(class=badgeClass)= badgeText

注:如果使用的Node.js版本较低不支持空值合并运算符??,可以替换为逻辑或运算符||即可。

优化收益

  • 代码量减少90%以上,完全消除重复冗余逻辑
  • 后续迭代成本极低:如果需要新增状态取值、修改状态样式/文案,仅需要修改statusMap一处即可;如果状态字段数量变化,仅需要修改内层循环的长度参数
  • 运行效率更高:对象属性查找替代多层if-else分支判断,性能开销更低

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:06:04