JS 数组sort方法的升序为什么是a-b你知道吗

 更新时间:2022年02月21日 17:19:49   作者:Bigfishseasugar  
这篇文章主要为大家详细介绍了JS 数组sort方法为什么升序是a-b,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

简单使用 sort 方法的时候,是按位排序的,比如:

    var arr = [1, 22, 15, 32, 4, 5]
    arr.sort()//[1,15,22,32,4,5]

这样的结果很明显不能满足大多数问题的需求,所以我们可以在调用sort方法的时候,传入一个回调函数,从而改变 sort 方法的排序方式。先放结果,下列两次排序分别为 升序排序 和 降序排序 。

    var arr = [1, 22, 15, 32, 4, 5]
    arr.sort((a, b) => {return a - b}) // 升序排序 [1, 4, 5, 15, 22, 32]
    arr.sort((a, b) => {return b - a}) // 降序排序 [32, 22, 15, 5, 4, 1]

回调函数的格式为(a,b)=> { return xxx },ab为数组中任意两个数

当返回值大于0时,a放在b的后面;

当返回值小于0时,a放在b的前面;

当返回值等于0时,ab位置不改变。

所以,为什么上面返回 a - b 就是升序,返回 b - a 就是降序了呢?

我们可以简单举个例子,类似于高中数学的分类讨论。

当 a>b 时,

a - b > 0  ,排序结果 ===> b,a (升序)

b - a < 0  ,排序结果 ===> a,b (降序)

当 b>a 时,

a - b < 0  ,排序结果 ===> a,b (升序)

b - a > 0  ,排序结果 ===> b,a (降序)

当 a=b 时,

a - b = b - a =0 , 排序结果 ===> 保持不变

由此看出,

无论a>b还是b>a,return a-b 总能得到升序的结果,而 return b-a 总能得到降序的结果。

另外,return a-b / return b - a 只是一种在理解的基础上简便的写法。

如果你还是不能理解,完全可以像这样写,下面也是一个升序排序:

因为返回值>0,把a放在后面,所以a>b时候,返回一个正数。后面理解同理。

    var arr = [1, 22, 15, 32, 4, 5]
    arr.sort((a, b) => {
      if (a > b) return 1;
      else if (a < b) return -1;
      else return 0;
    }); // [1,4,5,15,22,32]

相关文章

  • JavaScript基础语法让人疑惑的地方小结

    JavaScript基础语法让人疑惑的地方小结

    JavaScript基础语法让人疑惑的地方小结,学习js的朋友可以了解下
    2012-05-05
  • javascript判断office版本示例

    javascript判断office版本示例

    这篇文章主要介绍了javascript判断office版本示例,需要的朋友可以参考下
    2014-04-04
  • JS中Map和ForEach的区别

    JS中Map和ForEach的区别

    本篇文章给大家详细分析了JS中Map和ForEach的区别以及用法上的不同之处,对此有兴趣的朋友参考学习下吧。
    2018-02-02
  • 解析JavaScript的ES6版本中的解构赋值

    解析JavaScript的ES6版本中的解构赋值

    这篇文章主要介绍了解析JavaScript的ES6版本中的解构赋值,ES6版本为JS带来了诸多简化方面的改进,需要的朋友可以参考下
    2015-07-07
  • JavaScript中splice的使用方法详解

    JavaScript中splice的使用方法详解

    这篇文章主要为大家详细介绍了JavaScript中splice的使用方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • 用JavaScript脚本实现Web页面信息交互

    用JavaScript脚本实现Web页面信息交互

    这篇文章主要给大家介绍了关于用JavaScript脚本实现Web页面信息交互的相关资料,需要的朋友可以参考下
    2006-12-12
  • js时间比较示例分享(日期比较)

    js时间比较示例分享(日期比较)

    这篇文章主要介绍了js时间比较示例,代码简单,运行后可以看到结果,需要的朋友可以参考下
    2014-03-03
  • 告诉你什么是javascript的回调函数

    告诉你什么是javascript的回调函数

    在javascript中回调函数非常重要,它们几乎无处不在。像其他更加传统的编程语言都有回调函数概念,但是非常奇怪的是,完完整整谈论回调函数的在线教程比较少,倒是有一堆关于call()和apply()函数的,或者有一些简短的关于callback的使用示例。
    2014-09-09
  • JavaScript window.document的属性、方法和事件小结

    JavaScript window.document的属性、方法和事件小结

    document属性作为window对象的一个子对象被创建,是用于访问页面中所有元素的对象,这里简单整理下,方便学习js的朋友
    2012-10-10
  • Javascript基础教程之数据类型转换

    Javascript基础教程之数据类型转换

    JavaScript是一种无类型语言,但同时JavaScript提供了一种灵活的自动类型转换的处理方式。基本规则是,如果某个类型的值用于需要其他类型的值的环境中,JavaScript就自动将这个值转换成所需要的类型。
    2015-01-01

最新评论