如何在 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>
我有一个 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>