Search code examples
javascriptvue.jsv-for

how to nested loop and array in vue js?


Result of my query from controller

date: {2020-09-24: {work_hours: 7}, 2020-09-30: {work_hours: 8}}
2020-09-24: {work_hours: 7}
2020-09-30: {work_hours: 8}

This is my vue I'm trying to nested for loop but I'm getting double the result of looping

<table class="table table-hover table-bordered table-sm" >
  <thead>
      <tr>
        <template  v-for="disp in iDate.slice(1)">           
          <th scope="col" v-if="toWordDay(disp.date) == 'Sunday'" style="color:red">{{disp.date | forThDate}}</th>
          <th scope="col" v-else>{{disp.date | forThDate}}</th>
        </template>                           
      </tr>
  </thead>
  <tbody>
    <template v-for="fetch in attendanceData">
      <tr>
        <template v-for="disp in iDate.slice(1)">                
          <td style="height:10px;"  v-for="(data,ind) in fetch.date" v-if="ind == disp.date" >{{data.work_hours}}</td>  
          <td style="height:10px;" v-else>0</td>                          
        </template>                                  
      </tr>
    </template>

  </tbody>
</table>

Solution

  • Without knowing what attendanceData or iDate, I'm assuming fetch.date is what you mean the Result of my query from the controller, which is an object with the dates as keys. You could use disp.date as the accessor key.

    <table class="table table-hover table-bordered table-sm" >
      <thead>
          <tr>
            <template  v-for="disp in iDate.slice(1)">           
              <th scope="col" v-if="toWordDay(disp.date) == 'Sunday'" style="color:red">{{disp.date | forThDate}}</th>
              <th scope="col" v-else>{{disp.date | forThDate}}</th>
            </template>                           
          </tr>
      </thead>
      <tbody>
        <template v-for="fetch in attendanceData">
          <tr>
            <template v-for="disp in iDate.slice(1)">                
              <td style="height:10px;">
                 <template v-if="fetch.date[disp.date]">
                   {{fetch.date[disp.date].work_hours || 0}}
                 </template> 
                 <template v-else>0</template>
              </td>
            </template>                                  
          </tr>
        </template>
    
      </tbody>
    </table>