Array对象中的sort()方法是一个很高效的排序方法,用于对数组进行排序。其基本用法有两种:
1、不带参数
数组名.sort();
这种用法只适用于对英文字符串组成的数组按升序排序,结果在原数组中。
2、带参数
sort()方法的参数必须是一个函数,函数可以带一个或两个参数,表示数组的元素,返回值必须是正负零,表示数组元素相比较的办法。
数组名.sort( function(a,b){
return 正、负、零;
});
以下用例子给出常见排序的做法。
一、字符串数组的排序
1、升序排序
<script>
var a = ["Java","C","C++","JavaScript","jQuery","PHP","Python"];
a.sort();
console.log(a);
</script>
排序结果为:[“C”, “C++”, “Java”, “JavaScript”, “PHP”, “Python”, “jQuery”]。
注意:在英文编码中,小写字母比大写字母大,所以"jQuery"被排在了最后。
2、升序排序,不区分大小写
<script>
var a = ["Java","C","C++","JavaScript","jQuery","PHP","Python"];
a.sort(function (x, y) {
if(x.toLowerCase()>y.toLowerCase())
return 1;
else if(x.toLowerCase()<y.toLowerCase())
return -1;
else return 0;
});
console.log(a);
</script>
排序结果为:[“C”,“C++”,“Java”,“JavaScript”,“jQuery”,“PHP”,“Python”]。
3、降序排序
<script>
var a = ["Java","C","C++","JavaScript","jQuery","PHP","Python"];
a.sort(function (x, y) {
if(x<y)
return 1;
else if(x>y)
return -1;
else return 0;
});
console.log(a);
</script>
排序结果为:[“jQuery”,“Python”,“PHP”,“JavaScript”,“Java”,“C++”,“C”]。
二、数值数组的排序
1、升序排序
<script>
var a = [5,10,110,45,265,88,9];
a.sort(function (x, y) {
return x-y;
});
console.log(a);
</script>
排序结果为:[5, 9, 10, 45, 88, 110, 265]。
2、降序排序
<script>
var a = [5,10,110,45,265,88,9];
a.sort(function (x, y) {
return y-x;
});
console.log(a);
</script>
排序结果为:[265, 110, 88, 45, 10, 9, 5]。
三、中文数组的排序
中文可以按拼音顺序排序。
1、按拼音升序排序
<script>
var a = ["北京","南京","上海","深圳","哈尔滨","呼和浩特","南宁"];
a.sort(function (x,y) {
return x.localeCompare(y,"zh");
});
console.log(a);
</script>
排序结果为:[“北京”, “哈尔滨”, “呼和浩特”, “南京”, “南宁”, “上海”, “深圳”]。
localeCompare()是一个新出的字符串比较函数,低版本浏览器可能不支持。
2、按拼音降序排序
<script>
var a = ["北京","南京","上海","深圳","哈尔滨","呼和浩特","南宁"];
a.sort(function (x,y) {
return -x.localeCompare(y,"zh");
});
console.log(a);
</script>
排序结果为:[“深圳”,“上海”,“南宁”,“南京”,“呼和浩特”,“哈尔滨”,“北京”]。
四、对象数组的排序
如果数组元素是对象,我们可按对象的某个属性进行排序。
1、按对象的指定字段排序
例:按成绩降序排序
<script>
var a = [
{
no:"001",
name:"张琪",
score:80
},
{
no:"002",
name:"李颖",
score:72
},
{
no:"003",
name:"李新宇",
score:75
},
{
no:"004",
name:"王华",
score:72
},
{
no:"005",
name:"刘江",
score:82
}
];
a.sort(function (x,y) {
return y.score-x.score;
});
console.log(a);
</script>
排序结果为:
0: {no: “005”, name: “刘江”, score: 82}
1: {no: “001”, name: “张琪”, score: 80}
2: {no: “003”, name: “李新宇”, score: 75}
3: {no: “002”, name: “李颖”, score: 72}
4: {no: “004”, name: “王华”, score: 72}
2、双字段排序
例:按年龄从低到高排序,年龄相同时按性别排序
<script>
var a = [
{
name:"张琪",
gender:"男",
age:18
},
{
name:"李颖",
gender:"女",
age:17
},
{
name:"李新宇",
gender:"男",
age:18
},
{
name:"王华",
gender:"女",
age:18
},
{
name:"刘江",
gender:"男",
age:17
}
];
a.sort(function (x,y) {
if(x.age!=y.age)
return x.age-y.age;
else {
if(x.gender=="男")
return 1;
else
return -1;
}
});
console.log(a);
</script>
排序结果为:
0: {name: “李颖”, gender: “女”, age: 17}
1: {name: “刘江”, gender: “男”, age: 17}
2: {name: “王华”, gender: “女”, age: 18}
3: {name: “张琪”, gender: “男”, age: 18}
4: {name: “李新宇”, gender: “男”, age: 18}
小结:用sort()方法排序时,大部分情况都应该指定比较函数,这个函数给出的是数组中两个元素比较的办法,函数的返回值必须是正负零。你可以自己制定排序规则,这是sort()方法的强大之处。