JavaScript中sort()方法理解

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()方法功能一样。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容