JS sort()方法如何正确排序数字

在了解sort()方法如何正确排序数字前,我们需要知道unicode编码方式当中数字>大写字母>小写字母>中文的,如下图:
在这里插入图片描述
接下来我们正式进入正题。

一、JavaScript的数字与字符

JavaScript当中的数字和字符是两种不同数据类型,不能相互比较,因此在调用sort()方法的时候,会对数字进行字符串的转换:
在这里插入图片描述
转化之后就可以按照unicode表格来进行排序了,
在这里插入图片描述
可以看到上边我们创建的这个数组完全按照刚刚我们说讲的方式进行排序,

unicode里边的数字只有0-9,所以sort首先会对字符串最左边的字符进行排序,然后是第二位排序,然后才是第三位
下边是数字的排序过程:
在这里插入图片描述
我们添加两个参数(x,y)

var arr=[3,15,8,28,102,22];

arr.sort((x,y)=>{
    console.log(x+'-'+y+'='+(x-y));
    return x-y;
});

console.log(arr);

运行结果:
在这里插入图片描述
实际上x是后边那个元素,y是前边那个元素,而我们添加相减的运算规则后,底层排序规定实际是这样的。
在这里插入图片描述

二、排序一个数字数组

所以我们要的到一个数字数组的升序只需要

var arr=[3,15,8,28,102,22];

arr.sort((x,y)=>{
    console.log(x+'-'+y+'='+(x-y));
    return x-y;
});
console.log(arr);
//[3, 8, 15, 22, 28, 102]

降序只需要改成改成y-x即可即可:

var arr=[3,15,8,28,102,22];

arr.sort((x,y)=>{
    console.log(x+'-'+y+'='+(x-y));
    return y-x;
});
console.log(arr);
//[3, 8, 15, 22, 28, 102]

总结一下:
一次传入两个数字,x实际是后边那个元素,y实际是前面那个元素

升序:
就是把小的数字放在前面,大的数字放在后边,那么我们只需要用后边的数字减去前边的数字,如果后边的数字真的比前边的数字小,那么返回值就会小于0,那么就会调整位置。x会移动到y前面。 写法也就是 return x-y
降序:

就是把大的数字放在前面,小的放在后边,只需要用前面的数字减去后边的数字,如果后边的数字真的比前边的数字大,那么返回值就会小于0,也就会调整位置 写法也就是: return y-x

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
JavaScript中的sort()方法是一种常用的数组方法,它可以对数组中的元素进行排序sort()方法可以对数字、字母、日期等类型的元素进行排序。它使用一个排序算法将数组元素排序,并且不会创建一个新的数组,而是直接修改原始数组。 排序算法的具体实现并不会被公开说明,因为JS引擎采用了多种不同的算法来进行排序,以根据不同的情况和场景进行选择。 sort方法默认将数组元素按照字符串顺序进行排序,即使数组的元素是数字类型。要想在数字排序时获得正确的结果,需要提供一个比较函数来告诉sort方法如何排序。比较函数需要返回一个负数、零或正数,表示相应的值应该在排序后的数组中位于上一个值的前面、相同位置或者后面。 例如,如果想要按照数字大小进行升序排序,可以这样写比较函数: function compareNumbers(a, b) { return a - b; } 这个比较函数会返回一个负数、零或正数,表示a应该排在b的前面、和b相同位置或排在b的后面。 sort()方法可以排序数字、字符串、甚至是对象。在排序对象时,需要使用一个比较函数来定义排序规则,以确定哪些属性应该被用来进行排序。 需要注意的是,在使用sort方法时,进行排序时,一定需要提供一个比较函数。如果没有提供比较函数,则sort方法将按照字符串顺序进行排序,结果可能不是我们预期的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

优雅哥cc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值