在Javascript的数组Array中,sort()函数主要使用来对数组的元素进行排序。
它的语法是:
arrayObject.sort(sortby)
其中sortby是排序的比较函数,默认是空,代表按字母顺序对数组中的元素进行排序,要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。但是我们也可以规定指定的比较函数,来对数组的排序进行控制。
一、默认情况
按照字母顺序进行排序,举例如下:
<script type="text/javascript">
var arr = new Array(6)
arr[0] = "George"
arr[1] = "John"
arr[2] = "Thomas"
arr[3] = "James"
arr[4] = "Adrew"
arr[5] = "Martin"
document.write(arr + "<br />")
document.write(arr.sort())
</script>
二、按照数字大小排序
<script type="text/javascript">
function sortNumber(a,b)
{
return a - b
}
var arr = new Array(6)
arr[0] = "10"
arr[1] = "5"
arr[2] = "40"
arr[3] = "25"
arr[4] = "1000"
arr[5] = "1"
document.write(arr + "<br />")
document.write(arr.sort(sortNumber))
</script>
三、按照对象属性进行排序
假设现在有一个Person类,具有身高、体重、年龄三个属性,我们按照年龄进行排序,年龄相等再比较身高,身高相等再比较体重。
首先定义Person类:
function Person(n, s, w, a){
this.name = n; //用于区分对象
this.stature = s; //身高
this.weight = w; //体重
this.age = a; //年龄
}
定义比较函数:
function compareFunc(x, y){
if (x.age > y.age) {
return 1;
} else if (x.age == y.age) { //年龄相等,比较身高
if (x.stature > y.stature) {
return 1;
} else if (x.stature == y.stature) { //身高相等,比较体重
if (x.weight > y.weight) {
return 1;
} else if (x.weight == y.weight) {
return 0;
} else {
return -1;
}
} else {
return -1;
}
} else {
return -1;
}
}
测试:
//这个排序函数看着很复杂,其实就是3个if的嵌套
//创建3个Person类的实例,为了证明最后比较了体重,我故意将
//身高和年龄的值设为一样
var p1 = new Person("p1", 180, 55, 22);
var p2 = new Person("p2", 180, 60, 22);
var p3 = new Person("p3", 180, 58, 22);
//定义数组
var persons = [p1, p2, p3];
//这里的sort()方法带了一个参数a,这个a就是你自定义的排序函数名,不带括号
persons.sort(compareFunc);
//将排序后的结果循环输出
for (var i = 0; i < persons.length; i++) {
document.write(persons[i].name + "," + persons[i].stature + "," + persons[i].weight + "," + persons[i].age + "<br />");
}
最后输出的结果是:
p1,180,55,22
p3,180,58,22
p2,180,60,22
结果完全正确
以上是对数组中排序函数sort()中比较函数的一些想法,在遇到其他更加复杂的排序需求的时候,只需要根据具体的情况编写排序的规则就可以了,灵活应用。