用js的sort()函数进行数组 中文汉字排序 ---全网最全 求被反对!!!

46 阅读2分钟
0--- 函数比较概念

该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 ab,其返回值如下:

-   若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
-   若 a 等于 b,则返回 0。
-   若 a 大于 b,则返回一个大于 0 的值。

   function(x, y){
    return x - y;
}

1--- 对纯粹的英文字符串进行排序

arr.sort();       //> 此方法不会考虑值的大小。

var arr = [33, 3, 6, 2, 4, 1, 5];
console.log(arr.sort())

### 输出:[1, 2, 3, 33, 4, 5, 6]

2--- 升序排序

<script>
    var a = ["Java","C","C++","JavaScript","jQuery","PHP","Python"];
    a.sort();
    console.log(a);
</script>

### 输出:[“C”, “C++”, “Java”, “JavaScript”, “PHP”, “Python”, “jQuery”]
在英文编码中,小写字母比大写字母大,所以"jQuery"被排在了最后。

-   如需降序:`console.log(a.reverse());` 即可


3--- 升序排序,不区分大小写

<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”]

4--- 数值升序排序

<script>
    var a = [5,10,110,55,265,8,1];
    a.sort(function (x, y) {
        return x-y;
    });
    console.log(a);
</script>

### 输出:[1, 5, 8, 10, 55, 110, 265]

-   降序排序只需 `return y-x;`

5--- 中文数组按拼音排序

<script>
    var a = ["北京","南京","上海","深圳","哈尔滨","呼和浩特","南宁"];
    a.sort(function (x,y) {
        return x.localeCompare(y,"zh");
    });
    console.log(a);
</script>

### 输出:["北京", "哈尔滨", "呼和浩特", "南京", "南宁", "上海", "深圳"]

6-- 对象数组排序

<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}

备注: 以上均转发自 :   https://www.ycmbcd.com/blog/html/15916016656753.html

我补充的是第八种:

7--- 对象数组按照数组中的汉字首字首字母排序

<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 (x.name).localeCompare(y.name, "zh");
        });
</script>
        
 ### 输出:

-   0: {no: “005”, name: “刘江”, score: 82} 
-   1: {no: “002”, name: “李颖”, score: 72} 
-   2: {no: “003”, name: “李新宇”, score: 75} 
-   3: {no: “001”, name: “张琪”, score: 80} 
-   4: {no: “004”, name: “王华”, score: 72}