js sort排序

为什么sort()对数组中数字排序时,采用

sort(function(a, b) {
        return  a-b;
      }
)

代码即可实现对数组的升序排列?

sort()方法对于数组排序,在其中参数使用了比较函数compareFunction,那么会根据compareFunction的返回值进行排序。具体规定如下:

如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:

  • 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
  • 如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript
    标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
  • 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
  • compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

对于纯数字

 sort(function(a, b) {
        return  a-b;
      }
)

等价于

sort(function(a,b){
       if(a>b){
           return 1;
       }
       if(a<b){
           return -1;
       }
       return 0;
    }
   )

都属于升序排列。

具体理解其实就是一个初中数学的分类讨论问题。

(1)当a<b时,a-b<0。即return 一个负值。

根据compareFunction 的行为定义,a 会被排列到 b 之前,是升序排列方式。

(2)当a>b时,a-b>0。即return 一个正值。

根据compareFunction 的行为定义,b 会被排列到 a之前,也是升序排列方式。

(3)当a=b时,a-b=0。即return 零。

根据compareFunction 的行为定义,a 和 b 的相对位置不变。

综合(1)(2)(3)所述,代码

sort(function(a, b) {
        return  a-b;
      }
)

可以满足数字数组的升序排列要求。降序排列可同理推导。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值