1. 前言:
一直以来,对sort()方法的使用都仅仅停留在array.sort()这一步,今天看了《javascript高级程序设计》第五章 5.2.5重排序方法这一节时,对sort()方法的相关介绍看的不太明白,因此决定对sort()方法进行深入的学习。下面是我学习的总结。
2. 语法:
array.sort(sortfunction)
sortfunction:可选规定排序顺序。必须是函数。
3. 不使用参数
在不使用参数情况下,sort()方法按升序排列数组项。sort()方法会先调用每个数组项的toString()方法,然后按照字符编码的顺序进行排序。
实例 1
实例 2
如实例2所示,即使字符串中的数值全部都是数字,但sort()方法也同样会按照转化为字符串之后的值进行比较。
4. 使用参数
如果想要按照其他标准进行排序,就需要提供比较函数,该函数返回一个用于说明这两个值相对顺序的数字。比较函数应该具有两个参数a和b,其返回值如下:
- 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
- 若 a 等于 b,则返回 0。
- 若 a 大于 b,则返回一个大于 0 的值。
实例3
如上在使用了sortNum函数之后,就可以返回正确的值了,如果想进行降序排列只需要 return b-a 就可以了。sortNum函数只能用于数值类型,或者valueOf()方法返回数值类型的对象类型。
实例 4
上例中的compare函数适用于大多数的数据类型。要降序的话只要把x<y改成x>y就行了。
5. 多维数组
如果a和b本身就是数组,这个时候我们就需要通过对它们内部的值比较来对数组进行排序了。
实例 5
6. 多重比较
当第一个比较值相等,但是我们还想进行再次区分的时候,可以使用第二比较值,并且比较的深度可以随着我们的需求扩展。
实例 6
如上例学生数组所示,当学号相同时,这我们就需要用学生的名字进行再次排序。
7. 对象排序
当比较的数据越来越复杂的时候,我们最好使用对象进行排序。这样我们就能够从代码上看出来是使用什么值来进行比较的了。