html中sort函数,JavaScript

1.升序(从小到大)

arr.sort(function(a,b){//升序排序

if(a

else if(a>b){return 1;}//大于0 换位置,因为升序嘛,肯定是要让小的在前面,而现在a>b,所以要换成b a

else{return 0;}//a和b相等,不换位置

});

这里就是我们自己可以用一个比较函数(回调函数)来设置排序规则,用返回值来告诉这个方法,在进行两个数字比较的时候,交不交换位置:如果返回值是-1或者是小于0的值,a,b不需要换位置

如果返回值是1或者是大于0的值,a,b需要换位置

如果返回值是0,a,b相等,不需要换位置,

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2.那么降序(从大到小),也就简单了:

arr.sort(function(a,b){

if(a

else if(a>b){return -1;}//这里a>b,刚好是我们需要的,所以不用换位置,直接return -1

else{return 0;}//相等,不换

});

另外提一句:a,b相等,不换位置,这里换不换都无所谓,毕竟相等。不过不同的浏览器可能有的交换位置,有的不交换,不过这个我们不需要关心。

有个问题产生

其实不同的浏览器对这个sort排序方法的实现是不一样的,火狐用的是归并排序,谷歌用的是改进版快速排序。

提这句话,是因为开始遇到一个问题:arr = [5,4];

arr.sort(function(a,b){//括号里是回调函数

console.log("a=" +a);

console.log("b=" +b);

});

console.log(arr);

上面代码把数组的元素取出来,作为实参传递给function这个函数的形参a,b输出时,在不同的浏览器,a和b的值是不一样的:

在火狐会输出:a = 5; b = 4;

在谷歌/ie/edge:a = 4; b = 5;

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

产生错误的过程:

我是在谷歌浏览器进行调试的,所以开始跟sort方法的结论一样,我以为 a = 数组前一个值,b=数组后一个值,那么就是a = 5,b = 4.

然而在谷歌浏览器输出却是a = 4,b = 5,然后我刚好又看到我楼上那位兄弟说的,应该是b应该都是在a的前面,也就是arr = [第一个,第二个],这样它取元素不就是b=第一个,a=第二个。

再然后我就一想,这函数中那个返回值的规则不是也要换了么:此时不就是 b在前,a在后了么,那么b

b>a,不满足升序,要达成a b,那么要换位置,直接return 1

b=a,相等,不换位置,return 0

可是原本一个本意实现升序的,结果在浏览器中执行结果是降序的。(当然火狐也是一样降序的)

困扰了我很久,然后我输出a,b的值,去试了好几个浏览器,终于在火狐浏览器发现端倪:

在火狐会输出:a = 5; b = 4;

在谷歌/ie/edge:a = 4; b = 5;

我逐渐意识到也许我们在进行这个sort排序方法时,我们自身不需要去考虑数组元素赋值时,到底把第一个元素赋值给a,还是b。

搜了很多人的博客,发现几年前的谷歌调试代码,上面ab输出也是a = 5; b = 4;

只不过它后续更新升级,然后就改变成现在这样了a=4 b=5

但是无论火狐还是谷歌,他们最终实现的排序效果都是一样的,都是升序或都是降序

故此,得出一个结论,我们不需要去关注a,b(到底前面的传递给a,还是后面的传递给a)

我们需要记住的就是:

a在前,b在后,然后a

a>b时,换位置,return 1;(我们需要升序的时候)

a=b时,不换位置,return 0;

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

需要降序的时候,return 1 和 return -1换个位置就行了

最终进阶:直接就升序:return a-b;

(升序,如果ab,大于0,不是我们想要的,所以换位置)

同理,降序:return b-a;

九亿少女脚臭

九亿少女脚臭

pp7***74714@gmail.com3个月前 (03-15)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值