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

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

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

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

1.纯字符串数组排序代码语言:javascript复制let myArray = ["people","person","apple","ziv"]

console.log(myArray.sort())

// 打印结果[ 'apple', 'people', 'person', 'ziv' ] 其对于字符串数组直接按照字典顺序进行排序。注意:大小写字母也会影响排序结果,大写字母排在小写字母前面。

2.纯数字数组排序代码语言:javascript复制let myArray = [541,2,34,55,311]

console.log(myArray.sort())

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

3.混合类型数组排序代码语言:javascript复制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三种结果。我们用一个例子来解释一下。

代码语言:javascript复制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

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

sort()函数默认按照字典顺序进行排序。sort()函数可以接收一个函数作为参数。这个参数函数的返回值决定了数组的排序。返回值大于0会变换两个参数的位置,返回值小于0不会变换两个参数的位置。发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143848.html原文链接:https://javaforall.cn

相关推荐

2021年上新了北京!六大TOP级内城高端住宅新新向荣
联机宝到底怎么收费?一文说清奇游联机宝价格、功能及给Switch加速的完整教程
简单飞机如何开直升机 - 简单飞机 (Simple Planes) - MC百科
如何更改TP-Link產品的Wi-Fi密碼?
365BET导航

如何更改TP-Link產品的Wi-Fi密碼?

📅 08-13 👁️ 9434
冬月十一属于什么星座
365bet取款要多久到账

冬月十一属于什么星座

📅 09-04 👁️ 8147
如何在 Windows 10 中更改和配置 DNS ▷➡️
365bet取款要多久到账

如何在 Windows 10 中更改和配置 DNS ▷➡️

📅 08-06 👁️ 123
追光丨世界杯攻略·A组——“东道主首战不败定律”能否延续
对抗路女王归来:S40芈月最强玩法解析。
365bet最快线路监测中心

对抗路女王归来:S40芈月最强玩法解析。

📅 01-14 👁️ 3845
被称为最美蓝凤凰,多次感情打击下患抑郁症,如今的她怎么样了
饥荒添加mod进游戏没法用怎么解决
365bet取款要多久到账

饥荒添加mod进游戏没法用怎么解决

📅 02-24 👁️ 7771
分手后,男生不删前任微信的真相是什么?
365bet取款要多久到账

分手后,男生不删前任微信的真相是什么?

📅 12-06 👁️ 455
梳子用久了又脏又油腻 教你简单一招快速清洗 让梳子每天都干净