JavaScript:sort() 方法
ylbtech-JavaScript:sort() 方法 |
JavaScript sort() 方法
1. 定义和用法返回顶部 |
sort() 方法用于对数组的元素进行排序。
语法
arrayObject.sort(sortby)
参数 | 描述 | |
sortby | 可选。规定排序顺序。必须是函数。 |
返回值
对数组的引用。请注意,数组在原数组上进行排序,不生成副本。
说明
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
- 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
- 若 a 等于 b,则返回 0。
- 若 a 大于 b,则返回一个大于 0 的值。
2. 实例 1返回顶部 |
例子 1
在本例中,我们将创建一个数组,并按字母顺序进行排序:
<script type="text/javascript"> var arr = new Array(6) arr[0] = "George" arr[1] = "John" arr[2] = "Thomas" arr[3] = "James" arr[4] = "Adrew" arr[5] = "Martin" document.write(arr + "<br />") document.write(arr.sort()) </script>
输出:
George,John,Thomas,James,Adrew,Martin
Adrew,George,James,John,Martin,Thomas
例子 2
在本例中,我们将创建一个数组,并按字母顺序进行排序:
<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
请注意,上面的代码没有按照数值的大小对数字进行排序,要实现这一点,就必须使用一个排序函数:
<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>
输出:
10,5,40,25,1000,1
1,5,10,25,40,1000
3. 实例 2返回顶部 |
例子 1
在本例中,我们将创建一个数组,并按字母顺序进行排序:
<script type="text/javascript"> // by函数接受一个成员名字符串做为参数 // 并返回一个可以用来对包含该成员的对象数组进行排序的比较函数 var by = function (name) { return function (o, p) { var a, b; if (typeof o === "object" && typeof p === "object" && o && p) { a = o[name]; b = p[name]; if (a === b) { return 0; } if (typeof a === typeof b) { return a < b ? -1 : 1; } return typeof a < typeof b ? -1 : 1; } else { throw ("error"); } } } // 数组 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(by("age")); // 输出 for (var i = 0; i < employees.length; i++) { document.writeln(employees[i].name + "," + employees[i].age + "," + employees[i].retiredate + "<br>"); } </script>
输出:
Edward,17,June 2, 2023
George,32,March 12, 2014
Christine,58,December 20, 2036
Sarah,62,April 30, 2020
例子 2
到这里,对象数组排序就算基本实现了。那如何实现多个键值排序呢?意思就是先是对age排序,如果age相同,再比较name。
这时,我们可以进一步修改by函数,让其可以接受第二个参数,当主要的键值产生一个匹配的时候,另一个compare方法将被调用以决出高下。
<script type="text/javascript"> //by函数接受一个成员名字符串和一个可选的次要比较函数做为参数 //并返回一个可以用来包含该成员的对象数组进行排序的比较函数 //当o[age] 和 p[age] 相等时,次要比较函数被用来决出高下 var by = function (name, minor) { return function (o, p) { var a, b; if (o && p && typeof o === 'object' && typeof p === 'object') { a = o[name]; b = p[name]; if (a === b) { return typeof minor === 'function' ? minor(o, p) : 0; } if (typeof a === typeof b) { return a < b ? -1 : 1; } return typeof a < typeof b ? -1 : 1; } else { thro("error"); } } } // 数组 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(by('age', by('name'))); // 输出 for (var i = 0; i < employees.length; i++) { document.writeln(employees[i].name + "," + employees[i].age + "," + employees[i].retiredate + "<br>"); } </script>
输出:
Edward,17,June 2, 2023
George,32,March 12, 2014
Christine,58,December 20, 2036
Sarah,62,April 30, 2020
4.返回顶部 |
5.返回顶部 |
6.返回顶部 |
7.返回顶部 |
8.返回顶部 |
9.返回顶部 |
10.返回顶部 |
11.返回顶部 |
作者:ylbtech 出处:http://ylbtech.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |