小白发现 不知道你有没有注意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 })//降序。

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

相关推荐
TeamDev4 分钟前
如何在 DotNetBrowser 中使用本地 AI 模型
前端·后端·.net
小雅痞16 分钟前
[Java][Leetcode middle] 209. 长度最小的子数组
java·算法·leetcode
谢尔登22 分钟前
10_从 React Hooks 本质看 useState
前端·ubuntu·react.js
辰同学ovo24 分钟前
从全局登录状态管理学习 Redux
前端·javascript·学习·react.js
做时间的朋友。27 分钟前
精准核酸检测
java·数据结构·算法
爱看书的小沐28 分钟前
【小沐杂货铺】基于Three.js绘制三维艺术画廊3DArtGallery (Three.js,WebGL)
javascript·3d·webgl·three.js·babylon.js·三维画廊
冯诺依曼的锦鲤41 分钟前
从零实现高并发内存池:TCMalloc 核心架构拆解
c++·学习·算法·架构
Thomas_Lee_OR44 分钟前
多Agent路径规划 LaCAM for multi-agent path finding (MAPF)
算法·路径规划·仓储机器人·mapf
陈随易1 小时前
2年没用Nodejs了,Bun很香
前端·后端·程序员
一切皆是因缘际会1 小时前
可落地数字生命工程:从记忆厮杀到自我意识觉醒全链路,AGI内生智能硅基生命心智建模
人工智能·深度学习·算法·机器学习·ai·系统架构·agi