如何在 Vue Js 中遍历 Json 数组中的子数组?

How to loop through a sub array in a Json array in Vue Js?

我有一个 JSON 数据数组,我需要遍历外部和内部子数组并需要创建一个 Table。下面是示例数组

    {
        class:'I',
        subDdiv:[
            {
                div: 'A',
                subjects:['Subject1','Subject2','Subject3']
            },
            {
                div: 'B',
                subjects:['Subject1','Subject2','Subject3']
            },   
        ]
}
    {
        class:'II',
        subDdiv:[
            {
                div: 'A',
                subjects:['Subject1','Subject2','Subject3']
            },
            {
                div: 'B',
                subjects:['Subject1','Subject2','Subject3']
            },   
        ]
}

现在我需要创建一个 table 行标题为 Class 和 Div

labels :['class','div']

我写的代码没有给出实际结果,

<el-table :data="array" style="width: 100%">
  <el-table-column v-for="label in labels" :key="label"
   :prop="label"
   :label="label">
   </el-table-column>
 </el-table>

注意:我正在使用元素 Ui Table -https://element.eleme.io/#/en-US/component/table

我需要一个这样的table

但是我得到的table是

请帮我遍历内部子Div并创建table。 代码框-https://codesandbox.io/s/vigilant-wildflower-zgiq2?file=/src/App.vue

我用纯 HTML 表构建了一个快速示例,它应该让您了解如何使用 UI 组件库也能获得相同的结果。

new Vue({
  el: "#app",
  data: {
    contents: [
     {
        class:'I',
        subDdiv:[
            {
                div: 'A',
                subjects:['Subject1','Subject2','Subject3']
            },
            {
                div: 'B',
                subjects:['Subject1','Subject2','Subject3']
            },   
        ]
},
    {
        class:'II',
        subDdiv:[
            {
                div: 'A',
                subjects:['Subject1','Subject2','Subject3']
            },
            {
                div: 'B',
                subjects:['Subject1','Subject2','Subject3']
            },   
        ]
}
    ]
   }
})
td, th {
  padding: 5px 20px;
}
<script src="https://cdn.jsdelivr.net/npm/vue@2.6.11"></script>

<div id="app">
  <table>
    <thead>
      <tr>
        <th>Class</th>
        <th>Div</th>
      </tr>
    </thead>
    <tbody>
      <template v-for="item in contents">
        <tr v-for="subItem in item.subDdiv">
          <td> {{ item.class }} </td>
          <td> {{ subItem.div }} </td>
        </tr>
      </template>
    </tbody>
  </table>
</div>

为了能够在一个循环中循环数据(这是您使用的布局所要求的),您应该展平数据:

computed: {
    reducedArray() {
      return this.dataArray.reduce((prev, obj) => {
        let flatted = obj.subDdiv.map(item => {
          let subdiv = {};
          subdiv["class"] = obj.class;
          subdiv["div"] = item.div;
          return subdiv
        });
        return [...prev, ...flatted];
      }, []);
    }
  }

然后您可以通过循环扁平数组按原样使用您的代码:

<el-table :data="reducedArray" style="width: 100%">
      <el-table-column v-for="label in labels" :key="label" :prop="label" :label="label"></el-table-column>
</el-table>