当前位置: 首页 > news >正文

排序方法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在前,负数则相反。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • [001-03-007].第07节:Redis中的事务
  • 【数据结构与算法 | 灵神题单 | 快慢指针(链表)篇】力扣876, 2095, 234
  • CSS之我不会
  • tailscale与zerotier在linux冲突问题解决
  • 基于SSM的养老院管理系统
  • MyBatis 方法重载的陷阱及解决方案
  • 【Python】解析网络源码节点的时候,遇到空白的行怎么办?
  • HTML5超酷炫的水果蔬菜在线商城网站源码系列模板1
  • 【Qt】选择器
  • 【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)
  • Docker打包镜像
  • JavaScript高级——显式原型和隐式原型
  • 自学半年LabVIEW,能搭建出来一个系统吗
  • Datasheet SHT20芯片的数据手册
  • 在深度学习计算机视觉的语义分割中,Boundary和Edge的区别是?
  • centos安装java运行环境jdk+tomcat
  • CODING 缺陷管理功能正式开始公测
  • Consul Config 使用Git做版本控制的实现
  • extract-text-webpack-plugin用法
  • HashMap剖析之内部结构
  • JavaScript DOM 10 - 滚动
  • JavaScript标准库系列——Math对象和Date对象(二)
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • leetcode386. Lexicographical Numbers
  • Linux后台研发超实用命令总结
  • Odoo domain写法及运用
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Redis在Web项目中的应用与实践
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • sessionStorage和localStorage
  • storm drpc实例
  • TCP拥塞控制
  • Vue ES6 Jade Scss Webpack Gulp
  • vue:响应原理
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • Yeoman_Bower_Grunt
  • 阿里云前端周刊 - 第 26 期
  • 程序员最讨厌的9句话,你可有补充?
  • 前端性能优化——回流与重绘
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 智能网联汽车信息安全
  • 2017年360最后一道编程题
  • Spring Batch JSON 支持
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • ​iOS安全加固方法及实现
  • ​如何使用QGIS制作三维建筑
  • #### golang中【堆】的使用及底层 ####
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (Forward) Music Player: From UI Proposal to Code
  • (rabbitmq的高级特性)消息可靠性
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一