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