项目经验】:elementui表格中数字汉字排序问题

简介: elementui表格中数字汉字排序问题

一.需求

表格中数字汉字排序,数字按大小排列,汉字按拼音首字母(A-Z)排序。

二.用到的方法

第一步:把el-table-column上加上sortable="custom"

<el-table-columnprop="date"label="序号"sortable="custom"width="180"></el-table-column>

方法详细介绍:

sortable 对应列是否可以排序,如果设置为 'custom',则代表用户希望远程排序,需要监听 Table 的 sort-change 事件 boolean, string true, false, 'custom' false

第二步:在el-table绑定事件sort-change

<el-table:data="tableData"style="width: 100%"@sort-change="sort_change">

方法详细介绍:

sort-change 当表格的排序条件发生变化的时候会触发该事件 { column, prop, order }

第三步:实现功能(代码)

sort_change ({ column, prop, order }) {
letfieldname=prop;
letsortType=order;
if (fieldname=='date') {
// 数字排序this.getNums(fieldname, sortType)
            }
if (fieldname=='name') {
// 汉字首字母排序this.tableData.sort(this.compare(fieldname, sortType));
            }
        },
// 数字排序getNums (fieldname, sortType) {
if (sortType==="ascending") {
this.tableData=this.tableData.sort((a, b) =>b[fieldname] -a[fieldname]);
// console.log(this.tableData);            } elseif (sortType==="descending") {
this.tableData=this.tableData.sort((a, b) =>a[fieldname] -b[fieldname]);
            }
        },
// 汉字首字母排序compare (propertyName, sort) {
returnfunction (obj1, obj2) {
varvalue1=obj1[propertyName];
varvalue2=obj2[propertyName];
if (typeofvalue1==="string"&&typeofvalue2==="string") {
constres=value1.localeCompare(value2, 'zh');
returnsort==="ascending"?res : -res;
                } else {
if (value1<=value2) {
returnsort==="ascending"?-1 : 1;
                    } elseif (value1>value2) {
returnsort==="ascending"?1 : -1;
                    }
                }
            }
        }

三.字符串方法localeCompare()

概念:localeCompare() 方法用于比较两个字符串,并根据本地排序规则确定这两个字符串的顺序。这可以用于排序,例如在表格中按字母顺序排列行。

语法:string.localeCompare(compareString[, locales[, options]])

参数说明:

compareString:必需。要与调用字符串进行比较的字符串。

locales:可选。一个字符串数组,用于指定一种或多种区域设置代码。

options:可选。一个包含属性的对象,用于控制比较的各方面。

注意事项:

1、localeCompare() 方法是大小写敏感的。例如,"a" 和 "A" 是不同的字符。

2、localeCompare() 方法也是重音符号敏感的。例如,"é" 和 "è" 是不同的字符。

3、localeCompare() 方法的默认区域设置是当前系统的区域设置。

4、localeCompare() 方法返回的数字取决于本地排序规则。不同的语言和不同的区域设置可能会有不同的排序规则。

5、localeCompare() 方法不会更改原始字符串。它只是返回一个数字。

常用场景:汉字排序

四.总结

  1. 这里面相当于用了一个表格自定义排序方法,这个点是我们该考虑的,这里还可以用sort-method。这个方法是需要在每列都加的,我当时做的是动态添加表头的需求,sort-method就不好实现。
  2. 想用sort-change方法来自定义排序方法一定要sortable="custom";如果sortable="true",就代表你使用的默认排序。只有order=null时才会触发你自定义的方法。

五.源码(可直接复制跑起来)

<template><divclass="about"><el-table :data="tableData"style="width: 100%"@sort-change="sort_change"><el-table-columnprop="date"label="序号"sortable="custom"width="180"></el-table-column><el-table-columnprop="name"label="姓名"sortable="custom"width="180"></el-table-column></el-table></div></template><script>exportdefault {
name: 'WorkspaceJsonAboutView',
data () {
return {
tableData: [{
date: '1',
name: '田禹',
            }, {
date: '2',
name: '康康',
            }, {
date: '3',
name: '振洋',
            }, {
date: '4',
name: '根宝',
            }, {
date: '5',
name: '彤彤',
            }, {
date: '6',
name: '建鹏',
            }, {
date: '7',
name: '文文',
            }, {
date: '8',
name: '铖',
            }
            ],
        };
    },
mounted () {
    },
methods: {
sort_change ({ column, prop, order }) {
letfieldname=prop;
letsortType=order;
if (fieldname=='date') {
// 数字排序this.getNums(fieldname, sortType)
            }
if (fieldname=='name') {
// 汉字首字母排序this.tableData.sort(this.compare(fieldname, sortType));
            }
        },
// 数字排序getNums (fieldname, sortType) {
if (sortType==="ascending") {
this.tableData=this.tableData.sort((a, b) =>b[fieldname] -a[fieldname]);
// console.log(this.tableData);            } elseif (sortType==="descending") {
this.tableData=this.tableData.sort((a, b) =>a[fieldname] -b[fieldname]);
            }
        },
// 汉字首字母排序compare (propertyName, sort) {
returnfunction (obj1, obj2) {
varvalue1=obj1[propertyName];
varvalue2=obj2[propertyName];
if (typeofvalue1==="string"&&typeofvalue2==="string") {
constres=value1.localeCompare(value2, 'zh');
returnsort==="ascending"?res : -res;
                } else {
if (value1<=value2) {
returnsort==="ascending"?-1 : 1;
                    } elseif (value1>value2) {
returnsort==="ascending"?1 : -1;
                    }
                }
            }
        }
    },
};
</script><stylelang="less"scoped>.about {
width: 100%;
height: 100%;
background: yellowgreen;
display: flex;
justify-content: center;
align-items: center;
    .tableDiv {
width: 800px;
height: 100%;
    }
}
.el-table ::webkit-scrollbar {
display: block;
height: 938px;
width: 6px;
}
.el-table ::webkit-scrollbar-thumb {
box-shadow: inset000pxwhite;
-webkit-box-shadow: inset000pxwhite;
background: rgba(64, 158, 255, 0.6);
border-radius: 4px;
}
.el-table ::-webkit-scrollbar-track {
background: #424f6a;}
</style>
相关文章
|
Android开发 iOS开发 开发者
windows打包uniapp应用p12证书和证书profile文件的制作方法
uniapp打包app,无论是android还是ios,都需要证书。其中ios打包最麻烦,需要p12证书和证书profile文件。而uniapp官网的教程,创建p12证书需要苹果电脑,这里我们不用uniapp官网推荐的教程。因为我们大部分用户使用的是windows电脑,没必要因为打包一个ios应用花7K买一台mac电脑。
2253 0
windows打包uniapp应用p12证书和证书profile文件的制作方法
|
5月前
|
存储 人工智能 运维
千亿级 AI 搜索的效能实战:从混合检索到 Agentic RAG 的三年实战
本文为2026 Elastic中国大会演讲实录,直击千亿级AI搜索三大挑战:搜索融合(关键词+向量+稀疏检索原生一体)、极致效能(冷热分层、硬件降级、自研FalconSeek引擎)与Agentic RAG演进(结构化知识图谱+智能体自主推理),揭示企业级AI搜索从“能用”到“好用”再到“自进化”的实战路径。
1018 8
|
存储 人工智能 测试技术
用AI提升测试效率:智能体平台的「需求文档管理」功能上线啦!
霍格沃兹测试开发学社推出AI智能体测试平台,全新「需求文档管理」功能助力高效测试准备。集中管理需求文档,支持多种上传方式,智能生成测试用例,提升测试效率与准确性,助力迈向智能化测试新时代。
|
前端开发 API
el-table实现动态数据的实时排序,一篇文章讲清楚elementui的表格排序功能,利用@sort-change实现动态数据排序,el-table排序方法,el-table可变数据的动态排序
博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
关系型数据库 Java Go
解决 MyBatis-Plus + PostgreSQL 中的 org.postgresql.util.PSQLException 异常
解决 MyBatis-Plus + PostgreSQL 中的 org.postgresql.util.PSQLException 异常
2661 0
|
关系型数据库 MySQL PHP
fastadmin的详细安装过程
fastadmin的详细安装过程
1427 0
fastadmin的详细安装过程
vs code常见的查找快捷键大全
【11月更文挑战第1天】本文介绍了 VS Code 中的基本查找和替换操作,包括在当前文件中查找(Ctrl + F)、查找替换(Ctrl + H)、查找下一个(F3)和查找上一个(Shift + F3)。还涵盖了在多个文件中查找(Ctrl + Shift + F)和查找替换(Ctrl + Shift + H),以及符号查找相关操作,如转到符号(Ctrl + T)和在文件中查找符号(Ctrl + Shift + O)。这些快捷键和功能帮助用户高效地管理和编辑代码。
3734 2
|
机器学习/深度学习 人工智能 测试技术
探索AI在软件开发中的应用:提升效率与创新
【10月更文挑战第25天】本文探讨了AI在软件开发中的应用,包括自动化测试、代码生成与优化、智能项目管理等方面,介绍了TensorFlow、PyTorch和GitHub Copilot等实用工具,展望了AI在未来的潜力,并强调了AI对提升开发效率和创新能力的重要性。
|
安全 Linux
在Linux中,删除一个文件,删不掉是什么原因?
在Linux中,删除一个文件,删不掉是什么原因?
|
前端开发 JavaScript API
技术笔记:vue+pdfh5实现将pdf渲染到页面上
技术笔记:vue+pdfh5实现将pdf渲染到页面上