博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Array排序方法sort()中的大坑
阅读量:5966 次
发布时间:2019-06-19

本文共 1226 字,大约阅读时间需要 4 分钟。

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]

1、对了,跟想像中一样;

2、是因为字符串根据ASCII码进行排序,而小写字母a的ASCII码在大写字母之后,可以理解;
3、什么鬼?三岁小孩都不会错,现在居然...emoticon
看了大神的一些讲解是:
因为Array的sort()方法默认把所有元素先转换为String再排序,结果'10'排在了'2'的前面,因为字符'1'比字符'2'的ASCII码小。
还好有大神讲解,不然掉了sort()的坑都不知怎么爬上来。
数字大小排序,就要用比较方法来写了:

var arr = [10, 20, 1, 2];//方法一function sortNum01(x, y) {    if (x < y) {        return -1;    }    if (x > y) {        return 1;    }    return 0;};//方法二function sortNum02(x, y) {    return x -y;};alert(arr.sort(sortNum01))// [1, 2, 10, 20]alert(arr.sort(sortNum02))// [1, 2, 10, 20]

忽略大小写,按照字母序排序(先把字符串都变成大写或者都变成小写比较,对原来arr没影响):

var arr = ['Google', 'apple', 'Microsoft'];arr.sort(function (s1, s2) {    x1 = s1.toUpperCase();    x2 = s2.toUpperCase();    if (x1 < x2) {        return -1;    }    if (x1 > x2) {        return 1;    }    return 0;}); alert(arr);// ['apple', 'Google', 'Microsoft']

 

原文地址:http://www.qdfuns.com/notes/34750/0aadfcc0dde6a36ca9ab59613d285102.html

 

转载于:https://www.cnblogs.com/GarsonZhang/p/7977047.html

你可能感兴趣的文章
深入浅出JavaScript (五) 详解Document.write()方法
查看>>
Beta冲刺——day6
查看>>
在一个程序中调用另一个程序并且传输数据到选择屏幕执行这个程序
查看>>
代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
查看>>
关于在VS2005中编写DLL遇到 C4251 警告的解决办法
查看>>
提高信息安全意识对网络勒索病毒说不
查看>>
使用Jquery 加载页面时调用JS
查看>>
css+div+jquery弹出层
查看>>
求职相关(链接,不定期更新)
查看>>
pdo 连接数据库 报错 could not find driver 解决方法
查看>>
maya pyside 多个窗口实例 报错 解决
查看>>
我的友情链接
查看>>
通知中心
查看>>
我的友情链接
查看>>
MVC中的三个模块
查看>>
Line: 220 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:220:-1
查看>>
oracle 常用命令大汇总
查看>>
2012年春运火车票电话和网上订票技巧、攻略
查看>>
根据request获取请求路径
查看>>
mysql 并行复制
查看>>