Element el-table表格排序 过滤空数据

Element el-table表格排序 过滤空数据

今天做项目的时候,遇到了一个需求,排序表格内容的时候,只排序当前列有数据的数据,如果当前列没有数据,则将此行数据一直放置最后

Element 中 如果采用默认排序, 默认会将此列无数据的行放置在有数据的之前,如下图
在这里插入图片描述
自己手动排序的结果

  • 排序前
    在这里插入图片描述

1.首先在需要调用的表头上添加 sortable=“custom” 为定义过滤在这里插入图片描述
2.在el-table上监听需要自定义过滤的方法 并且传入默认排序 sortRule每次点击的时候会调用此方法

data() {
    return {
		 sortRule: { prop: null, order: null },
		}
	}

在这里插入图片描述
3. 此处需要提前拷贝一份一模一样的表格数据 用来取消排序的时候还原默认排序

 // 根据所选的指标集合  需要把子集集合的字段记上
                this.tableData = success ? data.data : [];
                this.sortData = success ? data.data : [];

4.执行排序变化的方法 直接上代码

   if (column.order !== null && column.prop === 'last_time') {
                    //last_time替换成你自己的列prop数据name
                    const data = [];
                    for (let i = 0; i < _this.tableData.length; i++) {
                        //tableData替换成你自己的el-tabel绑定的表格数据
                        //判断如果是空的push在数字后面,有值的就放在前面,然后把排好的数组再赋值给表格data
                        if (_this.tableData[i][last_time] === null) {
                            data.push(_this.tableData[i]);
                        } else {
                            data.unshift(_this.tableData[i]);
                        }
                    }
                    // 自定义排序方法  过滤掉 null undefined '' 等空值
                    data.sort((a, b) => {
                        if (a['last_time'] === b['last_time']) {
                            return 0;
                        } else if (a['last_time'] == null || a['last_time'] === "") {
                            return 1;
                        } else if (b['last_time'] == null || b['last_time'] === "") {
                            return -1;
                        } else if (column.order === "ascending") {
                            // 升序
                            return a['last_time'] < b['last_time'] ? -1 : 1;
                        } else {
                            // 降序
                            return a['last_time'] < b['last_time'] ? 1 : -1;
                        }
                    });
                    
                    
                    _this.tableData = data; //最后把排序好的表格数据赋值给排序前的表格数据
                }
             //如果不排序了,就恢复到最初未排序的状态
            if (column.order === null) {
            // 用之前拷贝的数据还原默认排序
                _this.tableData = _this.sortData;
            }
            _this.sortRule.prop = column.prop;
            _this.sortRule.order = column.order;
  • 排序后 成功将空值 放置最后
    在这里插入图片描述
    有其他好的方法还请大佬指点
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值