美文网首页JavaScript学习笔记
JavaScript中sort()方法理解

JavaScript中sort()方法理解

作者: 美少女战士bubble | 来源:发表于2016-06-28 11:26 被阅读175次

    sort() 方法用于对数组的元素进行排序

    sort可以传入参数,也可以不传参数,下面分别说明。

    不带参数
    <script type="text/javascript">
          var arr = new Array(6)
          arr[0] = "10"
          arr[1] = "5"
          arr[2] = "40"
          arr[3] = "25"
          arr[4] = "1000"
          arr[5] = "1"
          document.write(arr + "<br />")
          document.write(arr.sort())
    </script>```
    此时的输出是按照字符串的字典顺序来排列,输出如下:
    

    排序前:10,5,40,25,1000,1
    排序后:1,10,1000,25,40,5

    这种排序结果在很多情况下都不是最佳方案。那么,我们需要给sort方法传入一个比较函数作为参数。
    ***
    #####比较函数作为参数
    

    <script type="text/javascript">
    function sortNumber(a,b){
    return a - b
    }
    var arr = new Array(6)
    arr[0] = "10"
    arr[1] = "5"
    arr[2] = "40"
    arr[3] = "25"
    arr[4] = "1000"
    arr[5] = "1"
    document.write(arr + "<br />")
    document.write(arr.sort(sortNumber))
    </script>

    将比较函数作为参数传给sort()方法后,数值排序得到了我们想要的结果:
    

    排序前:10,5,40,25,1000,1
    排序后:1,5,10,25,40,1000

    **sort()方法如何排序呢**,下面是我总结的流程,供参考:
    1.sort方法将arr数组的值两两传入sortNumber函数,返回的值有3种情况:正数,负数,零。
    2.若sort方法接收到正数返回值,则交换传入sortNumber的两个数字,即当传入的a>b,则交换a与b;若sort方法接收到负数返回值和0返回值,则不交换。
    3.重复1和2,最终使数字按照从小到大的顺序排序。
    
    **以上述代码为例,流程如下**:
    
    1. 将a=10,b=5传入sortNumber,返回5,正数,则将10和5交换顺序,此时arr数组顺序为:5,10,40,25,1000,1
    2. 将a=10,b=40传入sortNumber,返回-30,负数,不改变顺序。此时arr数组顺序仍为:5,10,40,25,1000,1
    3. 将a=40,b=25传入,返回15,正数,交换顺序,此时arr数组顺序:5,10,25,40,1000,1
    4. 将a=40,b=1000传入,返回负数,不改变顺序,此时arr数组顺序:5,10,25,40,1000,1
    5. 将a=1000,b=1传入,返回正数,交换,此时arr数组顺序:5,10,25,40,1,1000
    
    此时,最大的元素被排到最后面了。是不是觉得很熟悉,没错,这就是冒泡算法的第一阶段,接下来,sort会接着将5,10传入sortNumber,进行第二阶段的排序。因此我们可以总结出,sort(sortNumber)里面自动进行的就是**冒泡排序法**。
    
    **举一反三**,如果我们给sort()方法参数传1,即sort(1),那么结果就是数组项顺序反转,和reverse()方法功能一样。

    相关文章

      网友评论

        本文标题:JavaScript中sort()方法理解

        本文链接:https://www.haomeiwen.com/subject/ikltjttx.html