el-table 二维数组合并行

话不多说直接上解决方法

使用的是 span-method 属性的方法 Function({ row, column, rowIndex, columnIndex })

合并行最后的样子
在这里插入图片描述

1.二维数组不做处理的话,效果是这个样子的

在这里插入图片描述

2.首先把二维数组转换为一维数组

循环遍历把二级对象全部转为一级对象

res.data.forEach((item,index)=>{
          for(let i=0;i<item.children.length;i++){
            let current={
              id:item.id,
              zhandian:item.zhandian,
              pingtai:item.pingtai,
              sub_buy_commission: item.children[i].buy_commission,
              sub_buy_exchange: item.children[i].buy_exchange,
              sub_cost: item.children[i].cost,
              sub_cross_send: item.children[i].cross_send,
              sub_exchange:item.children[i].exchange,
              sub_id: item.children[i].id,
              sub_local_send: item.children[i].local_send,
              sub_sort: item.children[i].sort,
              sub_tixi: item.children[i].tixi
            }
            this.tableData.push(current);
          }

转换完就是下面这个样子了
在这里插入图片描述

2.接下来就是确定要和并的行数了

思路:

getSpanArr() {
     this.tableData.forEach((item,index)=>{
       if(index==0){
         //这个数组用来存储要合并的行数
         this.spanArr.push(1);
         this.spanArr1.push(1)
         //保存数组下标
         this.tableIndex=0
         this.tableIndex1=0;
       }else{
       	    //this.tableData[index].zhandian  要合并行的字段
       	    //因为我是要合并第一列和第二列所以这里面会有两个判断
       	    
         if(this.tableData[index].zhandian==this.tableData[index-1].zhandian){      	
           this.spanArr[this.tableIndex]=this.spanArr[this.tableIndex]+1;
           this.spanArr.push(0)
           if(this.tableData[index].pingtai==this.tableData[index-1].pingtai){
             this.spanArr1[this.tableIndex1]=this.spanArr1[this.tableIndex1]+1;
             this.spanArr1.push(0);
           }else{
             this.spanArr1.push(1);
             this.tableIndex1=index
           }
         }else{
           this.spanArr.push(1);
           this.tableIndex=index
           this.spanArr1.push(1);
           this.tableIndex1=index
         }
       }
     })
    },

这是spanArr数组输出的值
在这里插入图片描述

3.最后就是合并了

rowIndex—当前行
columnIndex —当前列

rowspan:合并的行数
colspan:合并的列数

 dataSpanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) {//合并行的行为只在第一列进行
          const _row = this.spanArr[rowIndex];
          const _col = _row > 0 ? 1 : 0;
          return {
            rowspan: _row,
            colspan: _col
          };
      }
      if(columnIndex===1){//合并行的行为只在第二列进行
          const _row = this.spanArr1[rowIndex];
          const _col = _row > 0 ? 1 : 0;
          return {
            rowspan: _row,
            colspan: _col
          };
      }
    },
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现二维数组的表格,可以使用el-table组件的嵌套表头功能,并根据二维数组的结构动态生成表格列和数据。 首先,需要定义二维数组的数据结构,例如: ```javascript data() { return { tableData: [ ['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I'] ] } } ``` 然后,在模板中使用el-table组件,并使用v-for指令动态生成表头和表格数据: ```html <el-table :data="tableData"> <el-table-column v-for="(row, rowIndex) in tableData" :key="rowIndex" label="Row"> <template slot-scope="{ row }"> <el-table-column v-for="(cell, cellIndex) in row" :key="cellIndex" :label="'Column ' + (cellIndex + 1)"> {{ cell }} </el-table-column> </template> </el-table-column> </el-table> ``` 在这个例子中,我们使用v-for指令遍历二维数组的每一,并使用el-table-column动态生成每一的表头。然后,再在每一的slot-scope中使用v-for指令遍历该的每一个单元格,并使用el-table-column动态生成每一列的表头和数据。 最终效果就是一个二维数组的表格,每一作为一个表头,每一列作为一个表格列,其中的数据来自于二维数组。 完整的代码示例: ```html <template> <el-table :data="tableData"> <el-table-column v-for="(row, rowIndex) in tableData" :key="rowIndex" label="Row"> <template slot-scope="{ row }"> <el-table-column v-for="(cell, cellIndex) in row" :key="cellIndex" :label="'Column ' + (cellIndex + 1)"> {{ cell }} </el-table-column> </template> </el-table-column> </el-table> </template> <script> export default { data() { return { tableData: [ ['A', 'B', 'C'], ['D', 'E', 'F'], ['G', 'H', 'I'] ] } } } </script> ``` 这样就可以实现一个二维数组的表格,每一作为表头,每一列作为表格列,并显示相应的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值