在数组中存在着两个自身的重排序的方法:reverse()和sort()。固然,只有这两个方法还不足排序全部类型的数组,还能够定义一些比较函数来结合以上两个方法实现对数组的重排序。数组
reverse() 方法会反转数组的数组项的排序,该方法会改变原来的数组,而不会建立新的数组。bash
代码实现及效果以下:函数
var value = [1,2,3,4,5,9,2];
var value1 = [a,b,c,d,e,b];
value.reverse();
value1.reverse();
alert(value); //2,9,5,4,3,2,1
alert(value1); //b,e,d,c,b,a
复制代码
输出的结果是反转了数组项的顺序,这个方法至关直观明了,可是不够灵活。ui
在默认的状况下,sort()方法按升序排列数组项——及最小的值在最前面,最大的值在后面。为了实现排序,sort()方法会调用每一个数组的toString() 转型方法,而后比较字符串,以确认如何排序。值得注意的是,即便数组中每一项都是数值,sort() 方法比较的都是字符串,说的更具体一点先将数组的元素都转换成字符串,而后是按照字符编码的顺序进行排序。编码
var value = [0,1,5,10,15];
value.reverse();
alert(value); //0,1,10,15,5
复制代码
由例子可见,即便顺序原本是没有问题的,可是使用了sort() 方法也会根据字符串的结果改变原来的顺序。由于数值5虽然小于10,可是在进行字符串比较时,"5"位于"10"的后面,因此数组的顺序就被修改了。
使用sort() 方法在排列纯数值的数组的时候,并非什么好方案,这时候就要接收一个比较函数做为参数,使得能正确的排列数值的数组。spa
比较函数接收两个参数,若是第一个参数应该位于第二个以前则返回一个负数,若是两个参数相等则返回0,若是第一个参数应该位于第二个以后则返回一个正数。code
升序的代码以下所示:对象
function compare(value1,value2){
if(value1 < value2){
return -1;
}else if(value1 > value2){
return 1;
}else{
return 0;
}
}
复制代码
这个函数能够适用于大多数的数据类型,只要将其做为参数传递sort() 方法便可,以下所示:排序
var values = [1,3,4,6,5,2,8];
values.sort(compare);
alert(values); //1,2,3,4,5,6,8
复制代码
固然这个是升序的排列数组,想要实现降序,有两种方法。字符串
function compare(value1,value2){
if(value1 < value2){
return 1;
}else if(value1 > value2){
return -1;
}else{
return 0;
}
}
复制代码
简化版: emmm这个是一个更简单的比较函数,因为比较函数是经过返回一个小于零、大于零或等于零的值来影响排序结果,所以一个简单的减法操做就能够适当的处理中数值数组排序的状况。 升序的代码以下:
function compare(value1,value2){
return value1 - value2;
}
复制代码
降序的代码以下:
function compare(value1,value2){
return value2 - value1;
}
复制代码