Optimization of looping in Pug/Node.js

Viewed 46

I'm trying to optimize the looping statements in Pug/Node.js/Express, shown below. Simply, I read status data from database ("each portmap in portMap2"), and then check the value of st1, st2, st3, ... ,st12 to select a proper badge which will be displayed in a cell of table. Problem is the table has 7 sets of status data, each set has 12 cells. How can I optimize this looping ? Is there any better way than if-else_if-else statement?

    .row.row-cols-12
      each portmap in portMap2
        .col 
          if (portmap.st1 == 0)
            span.badge.badge-pill.badge-success Good
          else if (portmap.st1 == 1)
            span.badge.badge-pill.badge-danger Bad
          else if (portmap.st1 == 2)
            span.badge.badge-pill.badge-secondary Excluded
          else
            span.badge.badge-pill.badge-light Disconnected 
        .col 
          if (portmap.st2 == 0)
            span.badge.badge-pill.badge-success Good
          else if (portmap.st2 == 1)
            span.badge.badge-pill.badge-danger Bad
          else if (portmap.st2 == 2)
            span.badge.badge-pill.badge-secondary Excluded
          else
            span.badge.badge-pill.badge-light Disconnected 
        .col 
          if (portmap.st3 == 0)
            span.badge.badge-pill.badge-success Good
          else if (portmap.st3 == 1)
            span.badge.badge-pill.badge-danger Bad
          else if (portmap.st3 == 2)
            span.badge.badge-pill.badge-secondary Excluded
          else
            span.badge.badge-pill.badge-light Disconnected
        .col 
          if (portmap.st4 == 0)
            span.badge.badge-pill.badge-success Good
          else if (portmap.st4 == 1)
            span.badge.badge-pill.badge-danger Bad
          else if (portmap.st4 == 2)
            span.badge.badge-pill.badge-secondary Excluded
          else
            span.badge.badge-pill.badge-light Disconnected 
        .col 
          if (portmap.st5 == 0)
            span.badge.badge-pill.badge-success Good
          else if (portmap.st5 == 1)
            span.badge.badge-pill.badge-danger Bad
          else if (portmap.st5 == 2)
            span.badge.badge-pill.badge-secondary Excluded
          else
            span.badge.badge-pill.badge-light Disconnected 
        .col 
          if (portmap.st6 == 0)
            span.badge.badge-pill.badge-success Good
          else if (portmap.st6 == 1)
            span.badge.badge-pill.badge-danger Bad
          else if (portmap.st6 == 2)
            span.badge.badge-pill.badge-secondary Excluded
          else
            span.badge.badge-pill.badge-light Disconnected 
        .col 
          if (portmap.st7 == 0)
            span.badge.badge-pill.badge-success Good
          else if (portmap.st7 == 1)
            span.badge.badge-pill.badge-danger Bad
          else if (portmap.st7 == 2)
            span.badge.badge-pill.badge-secondary Excluded
          else
            span.badge.badge-pill.badge-light Disconnected 
        .col 
          if (portmap.st8 == 0)
            span.badge.badge-pill.badge-success Good
          else if (portmap.st8 == 1)
            span.badge.badge-pill.badge-danger Bad
          else if (portmap.st8 == 2)
            span.badge.badge-pill.badge-secondary Excluded
          else
            span.badge.badge-pill.badge-light Disconnected 
        .col 
          if (portmap.st9 == 0)
            span.badge.badge-pill.badge-success Good
          else if (portmap.st9 == 1)
            span.badge.badge-pill.badge-danger Bad
          else if (portmap.st9 == 2)
            span.badge.badge-pill.badge-secondary Excluded
          else
            span.badge.badge-pill.badge-light Disconnected 
        .col 
          if (portmap.st10 == 0)
            span.badge.badge-pill.badge-success Good
          else if (portmap.st10 == 1)
            span.badge.badge-pill.badge-danger Bad
          else if (portmap.st10 == 2)
            span.badge.badge-pill.badge-secondary Excluded
          else
            span.badge.badge-pill.badge-light Disconnected
        .col 
          if (portmap.st11 == 0)
            span.badge.badge-pill.badge-success Good
          else if (portmap.st11 == 1)
            span.badge.badge-pill.badge-danger Bad
          else if (portmap.st11 == 2)
            span.badge.badge-pill.badge-secondary Excluded
          else
            span.badge.badge-pill.badge-light Disconnected 
        .col 
          if (portmap.st12 == 0)
            span.badge.badge-pill.badge-success Good
          else if (portmap.st12 == 1)
            span.badge.badge-pill.badge-danger Bad
          else if (portmap.st12 == 2)
            span.badge.badge-pill.badge-secondary Excluded
          else
            span.badge.badge-pill.badge-light Disconnected
1 Answers

Use a for loop and bracket syntax:

.row.row-cols-12
  each portmap in portMap2
    - for (let i = 0; i < 12; i++)
      - let st = portmap['st' + (i + 1)]
      .col 
        if (st === 0)
          span.badge.badge-pill.badge-success Good
        else if (st === 1)
          span.badge.badge-pill.badge-danger Bad
        else if (st === 2)
          span.badge.badge-pill.badge-secondary Excluded
        else
          span.badge.badge-pill.badge-light Disconnected 
Related