sort( ) 和 reverse( ) , 前者默认升序,后者反转数组原来的顺序。
sort( ) 执行后会调用每个数组元素的toString( )方法,然后对得到的字符串进行排序。所以出现以下问题:
var values = [ 1, 2, 15, 5, 12] values.sort() //输出 0, 1, 12, 15 , 5
因此,sort( )接受一个比较函数作为参数来进行排序。
比较函数接受两个参数。这两个参数遵循一个法则:如果第一个参数应该排在第二个之前则返回一个负数,如果第一个参数应该排在第二个之后则返回一个正数,如果两个参数相等则返回0。
function compare(val1, val2){ if (val1 < val2){ return -1 }else if(val1 > val2){ return 1 }else{ return 0 } } var values = [ 1, 15, 5, 12] values.sort(compare); //输出 1, 5, 12, 15
运行过程如下:
//根据冒泡排序来进行升序: 第一个小于第二个,则第一个排在第二个前面,位置不变。这里依照上面的法则,return -1 //运行第一次 if(1 < 15){ return -1 }
//得到排序结果 [1, 15, 5, 12]
//冒牌排序: 第一个大于第二个,则第一个排在第二个后面,位置对换。这里依照上面的法则,retrun 1
//运行第二次
if(15 > 5){
return 1
}
//得到排序结果 [1, 5, 15, 12]
//运行第三次,同理得到最终结果 [1, 5, 12, 15]
同理需要降序的时候:
if(val1 < val2){ return 1 }else if(val1 > val2){ return -1 }
简洁写法:
function compare(val1, val2){ return val1 - val2 } var values = [ 1, 15, 5, 12] values.sort(compare); //输出 1, 5, 12, 15
如果实在理解不了,还是直接记住简洁写法的好。。。。。
参考资料:
《javascript高级程序设计》P92,P93