资讯专栏INFORMATION COLUMN

从基础的角度来谈谈javascript数组对象的sort()方法

zlyBear / 3085人阅读

这大晚上的,明天还要码地,废话就不多说了,因为无意(-. -)看见了有不少同学问关于数组排序的问题,也有不少同学给出了很好的解答,给了我不少启发,感谢大家对我(-_ -)的帮助.另外感谢@xuexiphpa同学在js数组中的排序问题中给的推荐.

 
 关于数组排序的sort()方法(不带参数):
       

那么上面的输出结果是什么呢?

   arr.sort()输出结果:a,b,c,d,e
   arr2.sort()输出结果:1,15,20,30,6

为什么是这样的结果呢?

在不带参数的情况下sort()方法默认会将数组元素当作string类型来升序排序,根据它们的unicode码从小到大依次排列.
我们先用charCodeAt获得一下它们的unicode值:

       元素 unicode 
       1     49
       15    49 53
       20    50 48
       30    51 48
       6     54

首先比较第一位的大小,相同的话比较第二位的unicode值的大小,所以就得出arr2的输出结果.

关于数组排序的sort(compareFun)方法(带参数):

     

输出结果:1,6,15,20,30
为什么呢?查手册我们知道

   a-b<0  a将会放在b前面  //a0  b将会放在a前面  //a>b

这里a,b是数组内相邻的元素依次进行比较,比较结果按照上述规则调整位置,所以总是数值小的元素排在前面,即升序排列.

同样,如果要降序排序的话,doucment.write(arr2.sort(function(a,b){return b-a;}));按照上述规则就变成了:

   -(a-b)>0=>b-a>0=>b>a   b将会放在a前面
   a-b=0                  a,b的位置不改变
   -(a-b)<0=>b-a<0=>b

注意:影响排序方式的是sort(compareFun(){return result;})参数返回结果与0的比较关系,至于(a-b)或是(b-a)它们是怎么被sort()识别判断而后又运算出结果的,看这里

   functin sort(functin(a,b){return result;}) {
        Native Code;
    }

从上述可以看出,对单纯的字符串(String)数组升序排序的话,sort()方法(无参数)比较适合;而在(Number)数组比较排序的时候,sort(compareFun)(带参数)更合适。

简单示意一下原理:
   
  

关于这个问题,还请大家多指教,晚安!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/78371.html

相关文章

  • 2018年蚂蚁金服前端一面总结(面向2019届学生)

    摘要:在这次蚂蚁金服的电话面试里面认识到了自己很多不足的地方吧。把字符串分割为字符串数组。从起始索引号提取字符串中指定数目的字符。通常消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。 先简短的介绍一下我自己吧,我是一个前端学习者,虽然我基础知识也学了比较好,但是许久不用的知识就像流失的水,很容易就忘。在这次蚂蚁金服的电话面试里面认识到了自己很多不足的地方吧。虽然在阿里内推后的人才...

    VEIGHTZ 评论0 收藏0
  • 2018年蚂蚁金服前端一面总结(面向2019届学生)

    摘要:在这次蚂蚁金服的电话面试里面认识到了自己很多不足的地方吧。把字符串分割为字符串数组。从起始索引号提取字符串中指定数目的字符。通常消息包括客户机向服务器的请求消息和服务器向客户机的响应消息。 先简短的介绍一下我自己吧,我是一个前端学习者,虽然我基础知识也学了比较好,但是许久不用的知识就像流失的水,很容易就忘。在这次蚂蚁金服的电话面试里面认识到了自己很多不足的地方吧。虽然在阿里内推后的人才...

    RobinQu 评论0 收藏0
  • 怎样使你 JavaScript 代码简单易读

    摘要:让我们先从怎样删除数组中的重复项这个简单问题开始。当然,这两个位置对于重复元素来说是不同的。仅允许存在唯一值,所以当你传入数组时,它会自动删除重复的值。祝你有一个美好的编码时间,尽量不要让生活中简单的事情复杂化。 翻译:疯狂的技术宅https://medium.freecodecamp.o... 本文首发微信公众号:前端先锋欢迎关注,每天都给你推送新鲜的前端技术文章 showIm...

    Lin_YT 评论0 收藏0
  • Java项目经验——程序员成长钥匙

    摘要:当你真正到公司里面从事了几年开发之后,你就会同意我的说法利用找工作,需要的就是项目经验,项目经验就是理解项目开发的基本过程,理解项目的分析方法,理解项目的设计思 Java就是用来做项目的!Java的主要应用领域就是企业级的项目开发!要想从事企业级的项目开发,你必须掌握如下要点: 1、掌握项目开发的基本步骤 2、具备极强的面向对象的分析与设计技巧 3、掌握用例驱动、以架构为核心的主流开发...

    zhangfaliang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<