排序方法sort使用方式不同而产生的不同结果,附力扣179思路

对sort的了解:

        sort是数组原型上的方法,接收一个回调函数作为参数;回调函数接收两个值a,b作为参数,表示正在比较的两个数组中的数字;sort的返回值是使用正负数来表示的:

正数:a排在b后面;

负数:a排在b前面;

0:相对顺序不变,可以理解为正数(因为在回调函数中,a是数组中后面的数,b是数组中前面的数,一般使用正负数,0使用较少)

使用的方式:

直接使用:Array.sort()

        这个是最简单的写法,表示将数组中的元素按照ASCLL表中字符代表的ASCLL码由小到大排序,那么这就存在一个这样的问题:1会排在99的前面,因为1的ASCLL码小于9的。

基本使用:Array.sort((a,b)=>a-b)

        平时我们大多使用这个方法对数字数组进行大小排序,如标题中所示,回调函数使用箭头函数表示,返回值为a-b,这个写法的作用是将数组中的数字从小到大排序。

        如果将返回值改为b-a,那么表示将数组中数字从大到小排序。

进阶使用:
方法一:按照对象属性排序

        Object.sort((a,b)=>a.age-b.age),按照对象中的age属性进行升序排列,当然,也可以写成b.age-a.age,进行降序排列。

方法二:多条件排序

        Object.sort((a,b)=>{

                if(a.age===b.age){

                        return a.count-b.count

                }

                return a.age-b.age

        })

上述代码表示按照年龄从小到大排序,年龄相同则按照成绩从小到大排序。

方法三:对数字类型字符串数组排序

        这个方法也是我写这篇博客的原因,在力扣179. 最大数 - 力扣(LeetCode)中,需要将数字字符串数组排序后得到最大数字。根据这个描述得知使用sort是一个很容易理解的方法:

nums.sort((a,b)=>{

        let str1=String(a)+String(b),str2=String(b)+String(a)

        if(str1>str2){

                return 1

        }else{

                return -1

        }

})

代码解释:由于sort比较字符串是使用ASCLL码,且0~9在ASCLL码中也是递增的,所以在长度相同的字符串中进行比较,得到的较大值就符合题目。根据上述sort的定义,返回值如果是正数,则a排在b后面,如果是负数则a排在b前边。

举例:假设数组为[3,34],str1='334',str2='343',比较下来str2第二位大于str1,所以返回正数,a应该放在 b前面,定义中提到a是数组中靠后的数,所以a为34,b为3,所以经过排序后得到数组为[34,4]。

注意事项:

当sort的回调函数包含属性计算时,如果该计算直接影响返回值,如方法一和基本使用中那样,那么只有当属性为Number类型才可以。

如果自己写回调函数体的话一定要注意a和b表示的是[后一个元素]和[前一个元素],返回正数表示后一个元素大于前一个,所以应该是a在后,b在前,负数则相反。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值
>