JavaScript 数组排序函数sort()的使用

JavaScript 数组排序函数sort()的使用简介  sort()方法是js中对于数组进行排序的函数。其可以方便快捷的实现对于数组的排序而不用我们自己编写排序方法。注:sort()函数会直接改变原数组。1.纯字符串数组排序letmyArray=[“people”,”person”,”apple”,”ziv”]console.log(myArray.sort())//打印结果[‘apple’,’people’,’person’,’ziv’]  其对于字符串数组直接按照字典顺序进行排序。注意:大小写字母也会影响排序结果,大

大家好,又见面了,我是你们的朋友全栈君。

简介

  sort()方法是js中对于数组进行排序的函数。其可以方便快捷的实现对于数组的排序而不用我们自己编写排序方法。注:sort()函数会直接改变原数组。

1.纯字符串数组排序

let myArray = ["people","person","apple","ziv"]
console.log(myArray.sort())
// 打印结果[ 'apple', 'people', 'person', 'ziv' ]

  其对于字符串数组直接按照字典顺序进行排序。注意:大小写字母也会影响排序结果,大写字母排在小写字母前面。

2.纯数字数组排序

let myArray = [541,2,34,55,311]
console.log(myArray.sort())
// 打印结果 [ 2, 311, 34, 541, 55 ]

  我们明显可以看出其排序结果并没有按照元素数值的大小进行排序,而是根据其每个位置上元素的字符顺序排列。所以sort()函数在不传参的情况下对数字数组也是按照字符顺序排序。

3.混合类型数组排序

let myArray = [1,2,'dwef',3, ,'ffff',undefined,5,NaN,9999999999999999999999]; // NaN的定义为一个数字类型的常量,所以排在字符串前面。
console.log(myArray.sort())
// 打印结果 [ 1, 1e+22, 2, 3, 5, NaN, 'dwef', 'ffff', undefined, <1 empty item> ]

  我们看到排序结果有些微妙:

  • 数字排列在字母前面
  • 9999999999999999999999被转换成科学计数法后排列在数字2的前面
  • NaN在js中是一个数值常量,排列在数值类型的最后面
  • undefined排列在字符串后面
  • 空元素被排列在最后

4.按照自定义方法进行排序。执行非字典顺序的排序

  sort()方法可以接收一个函数,这个函数有两个参数,函数的返回值决定了数组的返回结果
函数的返回值有大于0,小于0,等于0三种结果。我们用一个例子来解释一下。

let myArray = [541,2,1,34,55,311];
// 这个数组是第二步我们使用的数组,我们可以看到如果直接用sort()排序,它的结果为[ 2, 311, 34, 541, 55 ]
myArray.sort(
    function (x,y){ 
   
        console.log(x,y,x-y)
        return x-y
    }
);
console.log(myArray)
/*打印结果: 2 541 -539 34 2 32 34 541 -507 34 2 32 55 34 21 55 541 -486 311 55 256 311 541 -230 [ 2, 34, 55, 311, 541 ] * */

   因为不同浏览器对于sort()的内部实现不同,所以我们不对sort()内部实现做过多的解释,大体是分为插入、快速、归并、桶排序几种。
   这个匿名函数的返回值决定了数组的排序结果,现在我们传进去了x,y两个参数(有顺序,x在y的前面),如果x>y,则x-y>0,匿名函数返回的是一个正值,则x,y的位置会变换。
   如我们传进去了 541,2, 因为541-2 > 0 ,所以541和2的位置会变化,在排序后的数组中,541的索引大于2的索引。所以如果想要实现一个升序的数组,返回值为x-y就可以。
   在参数位置(x,y)不发生改变的情况下,想要实现降序,即如果x>y,顺序不变,x<y颠倒顺序,所以在x<y的的时候,我们要让返回值大于0,所以此时返回值为 y-x。

   以上例子已经讲解了返回值为什么要为x-y或者y-x。下面就总结一下sort()排序的主要事项:

  1. sort()函数默认按照字典顺序进行排序。
  2. sort()函数可以接收一个函数作为参数。
  3. 这个参数函数的返回值决定了数组的排序。返回值大于0会变换两个参数的位置,返回值小于0不会变换两个参数的位置。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/143848.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Autoconf 详解[通俗易懂]

    Autoconf 详解[通俗易懂]AutoconfCreatingAutomaticConfigurationScriptsEdition2.13,forAutoconfversion2.13December1998byDavidMacKenzieandBenElliston目录介绍创建configure脚本编写`configure.in用autoscan创建`configure.in用if

  • ansi编码是什么意思_编码ANSI

    ansi编码是什么意思_编码ANSIANSI就是其他外文编码,且不同国家和地区的ANSI各有不同,即不兼容。举例,在中文简体下,你如果想编码表,保存时

  • python安装numpy后pycharm导入不了_如何导入numpy

    python安装numpy后pycharm导入不了_如何导入numpypycharm安装好后numpy的导入pipinstallnumpy使用pip命令在dos环境下出现平台不支持,python版本太高,numpy不匹配,刚开始下的3.7的最新版,重新下载3.6的版本,安装成功。python安装的时候自己选择路径,勾选自动配置环境变量,默认安装路径在一个隐藏的文件夹temp里面,临时文件,容易系统清除。配置项目解释器,将py

  • delphi数组排序_sql排序函数

    delphi数组排序_sql排序函数var  m_bSort:  boolean=false;  //控制正反排序的变量     //ListView排序的回调函数,默认的是快速排序法,也可以自己在这里做算法  function  CustomSortProc(Item1,  Item2:  TListItem;  ParamSort:  integer):  integer;  stdcall

  • docker 导入镜像文件_docker镜像打包

    docker 导入镜像文件_docker镜像打包1.导出镜像:dockersave<myimage>:<tag>|gzip><myimage>_<tag>.tar.gz2.导入镜像:gunzip-c<myimage>_<tag>.tar.gz|dockerload

  • Mybatis动态SQL的实现[通俗易懂]

    Mybatis动态SQL的实现[通俗易懂]场景在实际应用开发过程中,我们往往需要写复杂的SQL语句,需要拼接,而拼接SQL语句又稍微不注意,由于引号,空格等缺失可能都会导致错误。Mybatis提供了动态SQL,也就是可以根据用户提供的参数,动态决定查询语句依赖的查询条件或SQL语句的内容。动态SQL标签if和where标签&amp;lt;!–动态Sql:where/if–&amp;gt;&amp;lt;select…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号