如何使用JS的排序函数sort()

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值