您的位置:首页 > Web前端 > JavaScript

【JavaScript】数组sort()排序规则

2014-02-23 21:06 731 查看
在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()中比较函数的一些想法,在遇到其他更加复杂的排序需求的时候,只需要根据具体的情况编写排序的规则就可以了,灵活应用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  javascript 数组 排序