js的Array的sort()排序方法
Array
的sort()
方法默认把所有元素先转换为String再排序,字符串是根据ASCII码进行排序,所以sort()
方法排序结果画风可能是这样的
// 看上去正常的结果: ['Google', 'Apple', 'Microsoft'].sort(); // ['Apple', 'Google', 'Microsoft']; // apple排在了最后: ['Google', 'apple', 'Microsoft'].sort(); // ['Google', 'Microsoft", 'apple'] // 无法理解的结果: [10, 20, 1, 2].sort(); // [1, 10, 2, 20]
第二个排序把apple
排在了最后,是因为字符串根据ASCII码进行排序,而小写字母a
的ASCII码在大写字母之后。
第三个排序是因为sort()
方法默认把所有元素先转换为String再排序,结果'10'
排在了'2'
的前面,而字符'1'
比字符'2'
的ASCII码小。
幸运的是,sort()
方法也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。
要按数字大小排序,我们可以这么写:
sort()
方法用于对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串Unicode
码点。
语法:arrayObject.sort(sortby);参数sortby可选。规定排序顺序。必须是函数。
注:如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
var arr = [10, 20, 1, 2]; arr.sort(function (x, y) { if (x < y) { return -1; } if (x > y) { return 1; } return 0; });
//
arr.sort(function(a,b){
return a-b;//升序
return b-a;//降序
}) console.log(arr); // [1, 2, 10, 20]
最后友情提示,sort()
方法会直接对Array
进行修改,它返回的结果仍是当前Array
:
var a1 = ['B', 'A', 'C']; var a2 = a1.sort(); a1; // ['A', 'B', 'C'] a2; // ['A', 'B', 'C'] a1 === a2; // true, a1和a2是同一对象
例如:学生根据年龄大小进行排序
var list=[ { name:"hq", age:24 }, { name:"gq", age:21 }, { name:"xm", age:25 } ] function compare(property){ return function(a,b){ var val1=a[property]; var val2=b[property]; return val1-val2; } } console.log(list.sort(compare("age"))) console.log(list.sort(function(a,b){ var val1=a["age"]; var val2=b["age"]; return val1-val2; })); console.log(list);
来源:https://www.cnblogs.com/yourself/p/8709459.html
参考:https://www.cnblogs.com/moqiutao/p/6382097.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2016-11-05 js 将json字符串转换为json对象的方法解析
2016-11-05 $.extend()了解心得
2016-11-05 angularjs入门基础一
2016-11-05 ion-slide-box,无限循环
2016-11-05 JS对于数据常见操作
2016-11-05 Error: failed to fetch platform android
2016-11-05 ionic不同view跳转到同一个