Powered by md-Blog  文 - 篇  访客 -

用JS的sort()函数进行数字、中文汉字拼音排序


  分类:JS+ES6  / 
更新:2020-11-01 17:25:35  /  创建:2020-06-08 15:34:25
不要删除

0、比较函数概念

该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
  • 若 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}

不要删除

小站不易,感谢支持!