ElementUI-Table 行数列数合并

表格数据合并技巧
本文介绍了一种高效的方法来合并表格中具有相同公司名称的行,通过使用数组来标记需要合并的行数,并提供了具体的实现步骤及代码示例。

后端返回的数据:

data:[
    {name: 'A公司', product: '喜之狗果冻'},
    {name: 'A公司', product: '喜之羊果冻'},
    {name: 'A公司', product: '喜之猫果冻'},
    {name: 'B工坊', product: '喜之鸡果冻'},
    {name: 'B工坊', product: '喜之鸭果冻'},
    {name: 'C工坊', product: '喜之牛果冻'},
    {name: 'C工坊', product: '喜之青蛙果冻'},
    {name: 'C工坊', product: '喜之蜗牛果冻'}
]

需要根据数据合并相同公司名的row,效果图如下:

在这里插入图片描述

方案

step1: 整理出当前数据需要从哪开始合并,且计算出合并多少行;

因为Table是一行一行遍历出来的,所以要给每一行一个标识,确定当前行要不要进行合并且合并多少行;
再根据Table提供的方法中的参数“rowIndex”确定当前行的标识,判断是否需要合并;
适合这种思想的标识方法是数组。因为要同时记录某条公司名重复出现的次数(要合并的行数)和在Table中是否合并(是否有合并的行数)。如:[3, 0, 0, 5, 0, 0, 0, 0],其中“3”和“5”代表合并的行数,“0”代表不合并。
也就是说数组中:合并的行数有值,不合并的行数没有值。

      let groupNameArr = {};
      // // 先再数组里存入一个索引作为第一个出现的次数基数
      let arr: any = [];
      // // 记录arr中合并次数的位置
      let ind = 0;
      res.forEach((item, index) => {
        // 相同名合并行数  +1
        // 不同名合并行数  arr.push(1),因为只出现过一次
        if (index !== 0 && item.groupName === res[index - 1].groupName) {
          // 合并的行数 +1
          arr[ind] += 1;
          // 推入不和并的行数
          arr.push(0);
        } else {
          // 新名从新位置开始记录
          ind = index;
          arr.push(1);
        }
      });
      this.groupNameArr = arr;

step2: 调用Table的objectSpanMethod方法,根据(rowIndex,columnIndex)确定合并那一列、合并多少行。
这里只需要判断是否大于0,大于0,则代表是每一合并行的初始

  private objectSpanMethod({ row, column, rowIndex, columnIndex }) {
    const number = this.groupNameArr[rowIndex];
    if (columnIndex === 0) {
      return {
        rowspan: number > 0 ? number : 0,
        colspan: number > 0 ? 1 : 0,
      };
    }
  }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值