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()方法的强大之处。


原文链接:https://blog.csdn.net/fenglin247/article/details/86895913