JavaScript中使用sort()方法将数组进行排序

JavaScript的sort()方法默认按utf-16代码单元序列排序,导致数字按字符串处理。通过自定义比较函数可以实现数字的升序或降序排序。返回值小于0时,元素x在y前;大于0时,x在y后;等于0时,位置不变(非所有浏览器遵循)。返回x - y实现升序,y - x实现降序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开门见山,让我们先看一段代码:

	// 定义一个数组
	let arr = [18, 64, 78, 99, 32, 2];
	// 使用sort()进行排序
	let result = arr.sort();
	// 输出
	console.log(result);

输出的结果:
在这里插入图片描述
这时候,英语好的同学就会有疑问:“sort不是排序的意思吗?为什么答案既不是降也不是升序呢?”
我们知道其实计算机底层是和0/1打交道的,我们看到的文本里会包含有数字、字符还有符号。那么计算机要处理这些文本就需要转换为0/1才能进行处理,每个国家都有不同的语言和符号,于是就有了Unicode来进行统一,我们的主角sort()方法就是根据utf-16代码单元序列进行排序的。

众所周知的是,在调用sort()方法时会对数字进行字符串的转换,这样就可以按照Unicode编码表进行排序了。在排序的过程中,sort()方法将数字转换为字符串,之后从左到右一个字符一个字符的进行对比。sort()方法就是这样对字符进行升序排序。

那么问题来了,如何才能让数字正确的进行升序或降序排序呢?
上代码!

// 定义一个数组
let arr = [18, 64, 78, 99, 32, 2];
// 使用sort()进行排序
let result = arr.sort(function (x, y) {
console.log(`${x} - ${y} = ${x - y}`);
return x - y;
});
console.log(arr);

运行结果:
在这里插入图片描述
从上述结果我可以看出,sort()方法是将数字从左到右两两进行对比,在函数内传入x,y两个参数。可以看到顺序是后面一个数减去前面一个数,知道x,y的顺序之后,就可以了解排序的原则了。在函数内添加x-y的返回值,数组顺序就变为正确的数字升序。可以看出只要顺序还没有排好,底层已经有很好的算法将它们对比并排序好为止。

官方规定的三种排序原则:

  1. 当function(x, y)得到的返回值小于0时,x会被移动到y前面。
  2. 当function(x, y)得到的返回值大于0时,x会被移动到y后面。
  3. 当function(x, y)得到的返回值等于0时,x与y的位置相对不变,但不是所有浏览器都遵守这个规则。

因此我们能看出,x实际上是后面那个元素,而y则是前面那个元素,这样就比较好理解了。
设置返回值时:

  1. x - y < 0,就说明x比y要小,小的数字会被移动到前面,所以最后的结果就是升序排序。
  2. x - y > 0,就说明x比y要大,大的数字在前面,也就是降序排序。

总结:
当你需要输出升序排序时,return x - y
当你需要输出降序排序时,return y - x

上述数组升序/降序的输出结果:

升序:
在这里插入图片描述
降序:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值