这些在看红宝书,看到一个重排序方法觉得平时还是经常会用到的,所以写下这篇小笔记~
下面请看这个例子:
var values = [0,1,5,10,15];
values.sort()
alert(values) // 0,1,10,15,5
可以看到,例子中的排序是没有问题的,但是sort方法也会根据测试字符串的结果改变原来的顺序,因为数值5虽然小于10,但是在进行字符串比较时,"10"则位于"5"的前面,于是数组的顺序就被改变了,所以这种排序方式在很多情况下都不是最佳方案,因此sort()可以接受一个比较函数作为参数,这样就可以指定哪个值在哪个值的前面。 比较函数如下:
function compare(value1,value2){
if(value1 < value2)
{
return -1 // 说明第一个参数小于第二个参数
}
else if(value1 > value2){
return 1 // 说明第一个参数大于第二个参数
}
else{
return 0 // 相等
}
}
这个比较函数适用于大多数数据类型,用的时候只需把函数当参数传递即可,如:
var values = [0,1,5,10,15];
values.sort(compare);
alert(values) // 0,1,5,10,15
这样是升序效果。如果想要降序效果,交换比较函数返回的值即可。
function compare(value1,value2){
if(value1 < value2)
{
return 1 // 说明第一个参数大于第二个参数
}
else if(value1 > value2){
return -1 // 说明第一个参数小于第二个参数
}
else{
return 0 // 相等
}
}
var values = [0,1,5,10,15];
values.sort(compare);
alert(values) // 15,10,5,1,0
如果只是想要反转原来的顺序,直接用reverse()方法就好