Welcome

首页 / 脚本样式 / Vue / Vue或UniApp二维数组实现动态表格

<template>

<view class="content">

<table border="1" cellspacing="0" cellpadding="0">

<tr>

<th>城市</th>

<th v-for="CityName in tableHeader">{{CityName}}</th>

</tr>

<tr v-for="(tr,index) in tableRowHeader">

<th>{{tr}}</th>

<td v-for="(CityName,cindex) in tableHeader">

{{tableDataList[index][cindex].CityCount}}

</td>

</tr>

</table>

</view>

</template>


<script>

export default {

data() {

return {

result: [{

"CityID": "1302",

"CityName": "唐山",

"PFDJ": "国Ⅳ",

"Citycount": 3

}, {

"CityID": "1302",

"CityName": "唐山",

"PFDJ": "国Ⅴ",

"Citycount": 195

}, {

"CityID": "1304",

"CityName": "邯郸",

"PFDJ": "国Ⅳ",

"Citycount": 17

}, {

"CityID": "1304",

"CityName": "邯郸",

"PFDJ": "国Ⅴ",

"Citycount": 12708

}, {

"CityID": "1350",

"CityName": "合计",

"PFDJ": "-",

"Citycount": 12923

}],

tableRowHeader: [],

tableHeader: [],

tableDataList: []

}

},

onLoad() {

var vm = this;

vm.initDataTable();

},

methods: {

contains: function(arr, obj) {

var i = arr.length;

while (i--) {

if (arr[i] === obj) {

return true;

}

}

return false;

},

initDataTable() {

var vm = this;

//初始化定义二维数数

for (var index in vm.result) {

var d = vm.result[index];

//初始化行头

if (!vm.contains(vm.tableRowHeader, d.PFDJ)) {

vm.tableRowHeader.push(d.PFDJ);

}

//初始化列头

if (!vm.contains(vm.tableHeader, d.CityName)) {

vm.tableHeader.push(d.CityName);

}

}

//初始化结果数组

vm.tableDataList = [];

var all = [];

for (var i = 0; i < vm.tableRowHeader.length; i++) {

var tmp = [];

for (var j = 0; j < vm.tableHeader.length; j++) {

tmp[j] = {

CityID: vm.tableHeader[j],

CityCount: vm.InitValue(vm.tableHeader[j], vm.tableRowHeader[i])

};

}

vm.tableDataList.push(tmp);

}

console.log("处理后结果:", vm.tableDataList)

},

InitValue: function(th, row) {

var vm = this;

var val = 0;

for (var p in vm.result) {

var dt = vm.result[p];

console.log("---------", dt.CityName, th, dt.PFDJ, row, dt.Citycount, "---------");

if (dt.CityName == th && dt.PFDJ == row) {

val = dt.Citycount;

break;

}

}

return val;

}

}

}

</script>


<style>

table{font-size: 14px;line-height: 35px;width:100%}

table td,table th{padding:0px 10px;text-align:center}

</style>