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不会变换两个参数的位置。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • UFT如何在谷歌浏览器上实现录制

    UFT如何在谷歌浏览器上实现录制https://user.qzone.qq.com/305132437/blog/1395738617?t=0.748526355385565https://user.qzone.qq.com/305132437/blog/14097396271.UFT安装目录\bin\Chrome,找到Agent.crx,复制2.拷贝到win7系统啊C:\Users\用户\AppData\Local\…

    2022年5月28日
    75
  • 图解-使用【变异系数】赋予权重,并比较效果

    图解-使用【变异系数】赋予权重,并比较效果变异系数CoefficientofVariation用于比较多组数据的离散程度比较两组量纲不同的数据的离散程度,不能用标准差,可考虑变异系数不适用场景:数据下限小于0(导致平均值等于0)变异系数权重法使用变异系数计得的权重值会随着数据的变化而变化,可认为是一种无监督学习

    2022年5月27日
    54
  • pmp证书(职称证书丢失补办流程)

    前言OpenSSL中的概念很多,网上的文档也非常的多,在这里做一下总结,首先明确以下内容。Https访问完整流程1)客户端发起一个https请求,连接到服务器的443端口。2)服务端把自己的信息以数字证书的形式返回给客户端(证书内容有密钥公钥,网站地址,证书颁发机构,失效日期等)。证书中有一个公钥来加密信息,私钥由服务器持有。3)验证证书的合法性客户端收到服务器的响应后会先验证证书的合法性(证书中包含的地址与正在访问的地址是否一致,证书是否过期)。4)生成随机密码(RSA签名)如果验

    2022年4月18日
    126
  • ClickHouse左连接

    ClickHouse左连接A左连接B===&amp;gt;S1区域SELECTdate,ts,country,province,city,ye_noFROM(SELECTdate,ts,country,province,city,0ASyes_noFROMDBa.tbaWH…

    2022年9月19日
    2
  • 什么是dll_dll文件怎么打开编辑

    什么是dll_dll文件怎么打开编辑   DLL的概念    DLL(DynamicLinkLibrary)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使…

    2022年4月18日
    41
  • spring boot之端口设置和contextpath的配置[通俗易懂]

    spring boot之端口设置和contextpath的配置[通俗易懂]端口设置Springboot默认端口是8080,如果想要进行更改的话,只需要修改applicatoin.properties文件,在配置文件中加入:1server.port=9090常用配置:1234567891011121314151617

    2025年12月7日
    9

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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