小白发现 不知道你有没有注意js当中的sort()函数

不知道你有没有注意js当中的sort()函数

哈喽哈喽,我是你们的金樽清酒,最近我在刷一些简单的leetcode的题目,其中有好多数组的题目,在对数组进行排序处理后可以使问题简单很多,但是最近一道题目中,我发现一直用的排序sort(),出问题了。

sort()排序的特点

  • sort()排序会改变原数组

如上图所示,我在浏览器中定义了一个,并且用了sort(),直接看nums,它的值是已经发生了改变的。 所以我们在leetcode当中用sort()会直接改变传入变量的值,不需要再用一个变量去存储。但是在做编程的话,最好是不要改变数组,要是一个纯函数。

sort()函数有什么问题呢? 存在负数排序就不准了

我们来看一个存在负数的例子

你看,是不是存在问题啦,并没有按照我们想要的方法排序,-2难道会比-4小嘛,而且后面的整数也没有按照我们的要求排序,那要是刷到有负数的题目就玩完啦

为什么会出现这种现象

因为sort()函数需要传入一个函数类型的参数,如果不是传函数参数的话,会以默认的方式进行排序,即按照字符编码的顺序进行排序。就好像上面的例子,在字符集中,-2的字符集会比-4要小,所以当我们没有传入函数参数的时候,就会出现上面的现象。

如何解决?

如何解决,这是一个好问题。那咱们就按照它原本的特性传入一个函数参数呗。

  • 升序
js 复制代码
let arr=[-3,-1,-2,3,5,1,2]
arr.sort(function(a,b){
retun a-b
})

排序成功

  • 降序
js 复制代码
let arr=[-3,-1,-2,3,5,1,2]
arr.sort(function(a,b){
retun b-a
})

排序成功

总结

sort()在js中可以将数组排序,但是会改变原函数,sort()里面要传入一个函数类型的参数,如果不传入参数则按照字符集来排序,那么存在负数的排序就会出现问题,要解决这个问题,我们就要在sort()当中传入函数参数sort(function(a,b) {return a-b })//升序 sort()当中传入函数参数sort(function(a,b) {return b-a })//降序。

在实践中发现问题,在实践中解决问题 自己发现解决的那就是自己的知识。

相关推荐
小小怪下士_---_1 分钟前
uniapp开发微信小程序自定义导航栏
前端·vue.js·微信小程序·小程序·uni-app
前端W2 分钟前
腾讯地图组件使用说明文档
前端
页面魔术5 分钟前
无虚拟dom怎么又流行起来了?
前端·javascript·vue.js
胡gh5 分钟前
如何聊懒加载,只说个懒可不行
前端·react.js·面试
Double__King8 分钟前
巧用 CSS 伪元素,让背景图自适应保持比例
前端
Mapmost10 分钟前
【BIM+GIS】BIM数据格式解析&与数字孪生适配的关键挑战
前端·vue.js·three.js
一涯11 分钟前
写一个Chrome插件
前端·chrome
鹧鸪yy18 分钟前
认识Node.js及其与 Nginx 前端项目区别
前端·nginx·node.js
跟橙姐学代码18 分钟前
学Python必须迈过的一道坎:类和对象到底是什么鬼?
前端·python