element表格排序(带有数值、字符串)解决排序错乱

本文介绍了如何解决Element UI表格中数值与字符串混合数据排序错乱的问题。通过监听`@sort-change`事件,自定义排序逻辑,先过滤掉'--',再对数值数据进行升序或降序排序。当取消排序时,使用原始数据恢复表格状态。此方法确保了排序的正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

element表格中的数据有两种形式:数值、字符串。element自带排序方法会发生排序错乱。如图:没有金额时,展示 --,图中升序排序错乱。
在这里插入图片描述

解决步骤

1. 在el-tabel中添加 @sort-change="handleSort"
<el-table 
   :data="tableData" 
   class="my-table" 
   @sort-change="handleSort"
>
</el-table>
2. methods中添加方法

方法中deepCopy为深拷贝方法,欲了解请点击:https://blog.csdn.net/honeymoon_/article/details/118703712

//自定义表格排序
/**
 * 思路:
 * 先过滤掉'--'
 * 对新数组进行常规升/降序排序,根据传入的order判断是升序还是降序
 * 如果点击表头取消排序也需要做判断,将数据还原成接口返回的数据
 */
handleSort({ column, prop, order }) {
  //prop:排序的字段、order:升序(ascending)、降序(descending)、取消排序(null)
  let copyTableDate = deepCopy(this.tableData);   //拷贝表格数据
  let reserveData = [];                          //过滤后保留的数据
  let filterData = [];                          //过滤掉的数据
  //开始进行数据过滤:将'--'过滤到filterData数组中,剩余数值型数据保留到reserveData中。
  copyTableDate.forEach(item => {        
    if(item[prop] === '--') {    //item[prop]:将要排序那个字段的值
      filterData.push(item);    //item:表格中的这条数据,即row
    } else {
      reserveData.push(item);
    }
  });
  // 排序
  if (order !== null) {
    if (order === 'descending') {   //降序
      // 冒泡排序
      reserveData = reserveData.sort((a, b) => b[prop] - a[prop]);
    } else { //升序
      reserveData = reserveData.sort((a, b) => a[prop] - b[prop]);
    }
    // 过滤掉的数据添加到数组末尾
     filterData.forEach(item => {
       reserveData.push(item);
     });   
     this.tableData = reserveData;
  } else {
    // 取消排序
    //this.copyTable是在接口得到表格数据的时候拷贝了一份,用来还原取消排序时的表格数据
    this.tableData = this.copyTable;  
  }
},
3. 验证

//升序
在这里插入图片描述
//降序
在这里插入图片描述
//取消排序
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值