element table合并行

28 篇文章 1 订阅
8 篇文章 0 订阅

参考的思路链接:https://www.cnblogs.com/rabbit-lin0903/p/12047963.html
感觉原博主的方法比我写得简洁。。我的有点繁琐,我是写到了一半思路断了,不知道找寻firstIndex,然后看到原博主的思路和代码接着写下去的,写出来重新巩固一下思路,后面看看我这菜鸡能不能做下优化,或者大佬们指点一下。

  1. 如果后端返回的数据没有进行排序,先将数据排序
  2. 将tableData数据去重,得到一个数组。
  3. 循环该数组,并在该数组里循环tableData。同一组数据下,找到tableData里的标识 与 去重数组里标识相同的firstIndex(合并行时的rowIndex),并计算出该组数据的长度(rowspan)
         /**
         * 获取要合并的数据的firstIndex和rowspan
         */
        getColSpanData() {
            this.tableData = this.tableData.sort(function(a, b) {
                return a["projectName"].localeCompare(b["projectName"], "zh-CN");
            });
            // 1.首先要对项目去重
            let list = [];
            for (var i = 0; i < this.tableData.length; i++) {
                for (var j = i + 1; j < this.tableData.length; j++) {
                    if (this.tableData[i].projectName == this.tableData[j].projectName) {
                        ++i;
                    }
                }
                list.push(this.tableData[i]);
            }
            console.log(list, this.tableData);
            // 首先找到新的项目名字 就将该项目名字放入到列表里 然后找到该项目名字出现了多少次 就等于需要合并的单元格
            // 2.循环去重后的list和表格数据,表格数据里每有数据和list相同时+1 colLength;
            for (let i = 0; i < list.length; i++) {
                let colLength = 0;
                for (let j = 0; j < this.tableData.length; j++) {
                    let item = this.tableData[j];
                    if (item.projectName === list[i].projectName) {
                        colLength++;
                        // 找到相同数据的 第一个在tableData里的index
                        if (list[i].firstIndex === undefined) {
                            list[i]["firstIndex"] = j;
                        }
                    }
                }
                list[i]["colLength"] = colLength;
            }
            this.colSpanArr = Object.assign([], list);
     }
        /**
         * 合并行
         */
        objectSpanMethod({ row, column, rowIndex, columnIndex }) {
            // console.log(1, rowIndex);
            // 为第一列时,每条数据只会执行1次console。否则有几个td就console几次()
            // 只合并第一列
            if (columnIndex === 0) {
                // 找到当前行数index是否是colSpan里的一个index
                let index = this.colSpanArr.findIndex((item) => {
                    //遍历数组
                    return item.firstIndex === rowIndex;
                });

                // 如果是 那么就找到当前数据的索引 ,然后rowspan 合并当前项目的条数
                if (index > -1) {
                    return {
                        rowspan: this.colSpanArr[index].colLength,
                        colspan: 1,
                    };
                } else {
                    return {
                        rowspan: 0,
                        colspan: 0,
                    };
                }
            }
        },
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值