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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • readprocessmemory error 299[通俗易懂]

    readprocessmemory error 299[通俗易懂]Itrytoreadallcommitedpagesofaprocess(Win7-64).Onmostpagesitworksbutitfailsforafewpages.Icannotexplainwhy.Hereismytestprogramme(compiledx32,testedinWin7-64):#inclu

    2022年10月4日
    2
  • 深入理解Volatile关键字及其实现原理「建议收藏」

    深入理解Volatile关键字及其实现原理「建议收藏」volatile的用法volatile通常被比喻成"轻量级的synchronized",也是Java并发编程中比较重要的一个关键字。和synchronized不同,volatile是一个变量修饰符,只能用来修饰变量。无法修饰方法及代码块等。volatile的用法比较简单,只需要在声明一个可能被多线程同时访问的变量时,使用volatile修饰就可以了。如以下代码,是一个比较典型的使用双…

    2022年5月12日
    40
  • Windows上更换鼠标指针图标「建议收藏」

    今天试着将自己的电脑的指针图标个性化升升级,试了一下还是非常简单。1.打开漫锋网的鼠标下载地址(我们需要的鼠标、壁纸、主题都在这下载,很安全放心进)https://zhutix.com/tag/cursors/2.选择一款自己喜欢的鼠标皮肤,并下载3.下载完成后,解压压缩包,右键下面这个“右键安装.inf”,并选择“安装”4.安装完成后,就已经给我们换上鼠标的皮肤了。当然,我们可…

    2022年4月12日
    225
  • CSS自定义鼠标指针样式「建议收藏」

    CSS自定义鼠标指针样式「建议收藏」还记得Web1.0时代的那些苦逼岁月吗?你想尽一切办法来优化你的网站.还要饱受IE6惨无人道的虐待,举个栗子,IE中那些害死人不偿命的滚动条,我一直记得第三方类库CometCursor.CometCursor非常强悍,主要用来创建和加载自定义鼠标光标样式。现在可能你会觉得当初的那些实现手段特别老土,但有时又确实需要定制一下光标图案,那么一起来看看CSS怎么实现吧,It’sSoEasy,哪里不会点哪里!

    2022年5月20日
    28
  • Python之抽象基类建议收藏

    抽象基类的核心定义在abc模块中,模块中包括了创建抽象基类需要的修饰符和元类型abc.ABCMeta用来生成抽象基础类的元类。由它生成的类可以被直接继承。abc.ABC辅助类,让你可以不用关心元类

    2021年12月19日
    54
  • 基于C语言的图书管理系统_c语言图书管理系统课程设计报告

    基于C语言的图书管理系统_c语言图书管理系统课程设计报告该系统包括以下功能:1、注册账号2、登录账号3、修改密码4、录入功能5、添加功能6、删除功能7、修改功能8、浏览功能9、查询密码10、排序功能

    2022年10月11日
    3

发表回复

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

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