js中的sort()方法是用于对数组的元素进行排序。
先从w3c 复制一下定义:
arrayObject.sort(sortby)
其中sortby 如果要加参数必须是一个函数
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
其实也已经说得比较清楚了,稍微看个例子
(function(){ var a=[1,2,23,4,5,16,7]; document.write(a.sort(sortNumber));//返回的是1 2 4 5 7 16 23 function sortNumber(a,b){ return a-b; } })();
但是只是简单的这样的排序未免太无趣!其实sort的精髓在于对比较函数的写法的应用,写好了,我们可以做到不同数据类型的排序,比如说 字符串排序 日期排序 等等
看下面的例子:
var a=['1班','12班','19班','22班','8班','9班','10班']; document.write(a.sort());//返回 10班,12班,19班,1班,22班,8班,9班
但是这并不是我们希望的排序方式,那么需要对比较函数 做一些处理,需要用到parseFloat()方法
(function(){ var a=['1班','12班','19班','22班','8班','9班','10班']; document.write(a.sort(sortNumber));//返回 1班,8班,9班,10班,12班,19班,22班 function sortNumber(a,b){//对字符串类型的数组元素进行排序 var a1=convert(a,'float'); var b1=convert(b,'float'); return a1-b1; } function convert(value,dataType){//对常用的数据类型进行了函数封装 switch(dataType){ case 'int': return parseInt(value); case "float": return parseFloat(value); case "date": return new Date(Date.parse(value)); default: return value.toString(); } } })();
这下就是我们想要的结果了!其实我们还可以去扩展到自己的表格排序方面,对多组多列数据的排序