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

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

相关推荐
掘金挖土41 分钟前
前端手摸手跑路之 AI 应用开发(九)
前端·后端
zyl7653 小时前
FlashAttention 详解:从 GPU 硬件、普通 Attention 到分块计算与 Online Softmax
算法
中文呀3 小时前
三维 GIS 离线缓存实战:逆向 CesiumOfflineCache,并亲手为它补上"自动更新"能力
前端
前进前进前进4 小时前
TRAE 全链路实战:做了一个警示牌一键生成器:纯 Canvas、单文件、零依赖
前端
小万7425 小时前
God‘s Eye View 深度解析:15 路公开信号 + CesiumJS 的浏览器级 OSINT 控制台,60 帧渲染的“真实间谍卫星模拟器”
前端
IT星宿5 小时前
浏览器标签页全是一个图标:我用名字哈希生成 favicon,让每个项目都有身份标识
前端
OpsEye5 小时前
大模型账单对账难:不同厂商 Token 统计口径差异怎么处理
javascript·ai编程
全栈项目管理程序猿5 小时前
ArcGIS JS 基础教程(32):体元系列 - VoxelSlice 体元切片
前端·javascript
爱读书的小胖7 小时前
LeetCode 122:买卖股票的最佳时机 II(C)解题分析
算法