js sort排序问题
排序出问题
// ***
this.tableData = res.data.sort(this.sortDesc('size'))
// ***
sortDesc (key) {
return function (obj1, obj2) {
const val1 = obj1[key]
const val2 = obj2[key]
if (val1 < val2) {
return 1
} else if (val1 > val2) {
return -1
} else {
return 0
}
}
}
其中res.data为数组对象,size为字符串,例如‘3.12’
当整数仅有个位数时,排序正常:
但当出现十位数时,排序出现问题:
经排查,原因如下:
sort() 方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串UniCode码。
例一:按照字母顺序排序
例二:还是按照字母顺序排序
但这并不是我们需要的结果
如果要得到自己想要的结果,不管是升序还是降序,就需要提供比较函数了。该函数比较两个值的大小,然后返回一个用于说明这两个值的相对顺序的数字。
比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,即 a - b 小于零,则返回一个小于零的值,数组将按照升序排列。
若 a 等于 b,则返回 0。
若 a 大于 b, 即 a - b 大于零,则返回一个大于零的值,数组将按照降序排列
按照数组对象中某个属性值进行排序
开头遇到的问题解决方法有两种:
1、修改比较方法
sortDesc (key) {
return function (obj1, obj2) {
const val1 = obj1[key]
const val2 = obj2[key]
if (parseFloat(val1) < parseFloat(val2)) {
return 1
} else if (parseFloat(val1) > parseFloat(val2)) {
return -1
} else {
return 0
}
}
}
2、重写比较方法
sortDesc (key) {
return function (obj1, obj2) {
const val1 = obj1[key]
const val2 = obj2[key]
return val1-val2
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」
2019-02-25 git--创建空的分支