1. 前言:

  一直以来,对sort()方法的使用都仅仅停留在array.sort()这一步,今天看了《javascript高级程序设计》第五章 5.2.5重排序方法这一节时,对sort()方法的相关介绍看的不太明白,因此决定对sort()方法进行深入的学习。下面是我学习的总结。

2. 语法:

array.sort(sortfunction)

sortfunction:可选规定排序顺序。必须是函数。

3. 不使用参数

  在不使用参数情况下,sort()方法按升序排列数组项。sort()方法会先调用每个数组项的toString()方法,然后按照字符编码的顺序进行排序

实例 1

<script>
     var arr = new Array('东方云游','阿红' ,'小明','a','B');
     arr.sort();
     console.log(arr); //["B", "a", "东方云游", "小明", "阿红"]
</script>

实例 2

<script>
     var values = [0, 1, 3, 5, 7, 10, 15, 36];
     values.sort();
     console.log(values);//[0, 1, 10, 15, 3, 36, 5, 7] 
</script>

  如实例2所示,即使字符串中的数值全部都是数字,但sort()方法也同样会按照转化为字符串之后的值进行比较。

 4. 使用参数

   如果想要按照其他标准进行排序,就需要提供比较函数,该函数返回一个用于说明这两个值相对顺序的数字。比较函数应该具有两个参数a和b,其返回值如下:

  • 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
  • 若 a 等于 b,则返回 0。
  • 若 a 大于 b,则返回一个大于 0 的值。

 实例3

<script>
     function sortNum(a,b) {
         return a - b;
     }
     var values = [0, 1, 3, 5, 7, 10, 15, 36];
values.sort(sortNum); console.log(values);
//[0, 1, 3, 5, 7, 10, 15, 36] </script>

如上在使用了sortNum函数之后,就可以返回正确的值了,如果想进行降序排列只需要 return b-a 就可以了。sortNum函数只能用于数值类型,或者valueOf()方法返回数值类型的对象类型。

实例 4

<script>
     function compare(x, y) {
         return x < y ? -1 : x > y ? 1 : 0;
     }
     var letters = ["L", "o", "V", "e"];
     letters.sort(compare);
     console.log(letters);//["L", "V", "e", "o"]  在字符编码中大写字母在小写字母前面
     var nums = [1, 3, 5, 8, 13, 46, ];
     nums.sort(compare);
     console.log(nums);//[1, 3, 5, 8, 13, 46]  
</script>

上例中的compare函数适用于大多数的数据类型。要降序的话只要把x<y改成x>y就行了。

5. 多维数组

  如果a和b本身就是数组,这个时候我们就需要通过对它们内部的值比较来对数组进行排序了。

实例 5

<script>
     function sortArr(a, b) {
         return a[0] - b[0];
}
var students = [ [1, '东方云游'], [8, '乔布斯'], [4, '比尔盖茨'], [12, '马云'] ] students.sort(sortArr); </script>

6. 多重比较

  当第一个比较值相等,但是我们还想进行再次区分的时候,可以使用第二比较值,并且比较的深度可以随着我们的需求扩展。

实例 6

<script>
     function sortArr(a, b) {
         if (a[0] == b[0]) {
             return a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0;
         }
         return a[0] - b[0];
     }
     var students = [
         [1, '东方云游'],
         [4, '乔布斯'],
         [4, '比尔盖茨'],
         [4, '马云']
     ]
     students.sort(sortArr);
</script>

如上例学生数组所示,当学号相同时,这我们就需要用学生的名字进行再次排序。

 7.  对象排序

  当比较的数据越来越复杂的时候,我们最好使用对象进行排序。这样我们就能够从代码上看出来是使用什么值来进行比较的了。

<script>
     function compare(a, b) {
         return a.age - b.age
     }
     var employees = []
     employees[0] = { name: "George", age: 32, retiredate: "March 12, 2014" }
     employees[1] = { name: "Edward", age: 17, retiredate: "June 2, 2023" }
     employees[2] = { name: "Christine", age: 58, retiredate: "December 20, 2036" }
     employees[3] = { name: "Sarah", age: 62, retiredate: "April 30, 2020" }
     employees.sort(compare);
</script>

 

 

 

 

 

 

 posted on 2013-12-09 11:21  东方云游  阅读(1055)  评论(0编辑  收藏  举报