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

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

相关推荐
资深web全栈开发30 分钟前
LeetCode 3623. 统计梯形的数目 I
算法·leetcode·职场和发展·组合数学
SVIP1115935 分钟前
即时通讯WebSocket详解及使用方法
前端·javascript
Jay20021112 小时前
【机器学习】23-25 决策树 & 树集成
算法·决策树·机器学习
dragoooon342 小时前
[优选算法专题九.链表 ——NO.53~54合并 K 个升序链表、 K 个一组翻转链表]
数据结构·算法·链表
mCell5 小时前
使用 useSearchParams 同步 URL 和查询参数
前端·javascript·react.js
mCell6 小时前
前端路由详解:Hash vs History
前端·javascript·vue-router
海上彼尚7 小时前
无需绑卡的海外地图
前端·javascript·vue.js·node.js
1024肥宅7 小时前
手写 call、apply、bind 的实现
前端·javascript·ecmascript 6
xlq223228 小时前
22.多态(上)
开发语言·c++·算法
666HZ6668 小时前
C语言——高精度加法
c语言·开发语言·算法